2017-02-23 56 views
0

我正在为1个账户项目工作,我卡在1个地方。需要计算借方的运行余额

表是借记

ID  Debit  Credit  A  B  C 
1  1000.00  900.00  0  0  1000.00  
2  450.00  425.00  0  450.00 0 
3  500.00  490.00  500.00 0  0 
4  600.00  599.00  600.00 0  0 
5  748.00  700.00  0  748.00 0 


Now if we sum the credit it will be = 3114, 
What I have to do here is whatever total credit I have it has to start from top (A+B+C) - 3114 
So It will make C = 0 and my new credit will be 3114-1000=2114, 
Then in my id=2 it will do the same thing (A+B+C) - 2114 
so now B will be 0 and my new credit will be 2114-450=1664 

所有的计算后,我的最终输出应该是

ID  Debit  Credit  A  B  C 
1  1000.00  900.00  0  0  0.00   
2  450.00  425.00  0  0.00 0 
3  500.00  490.00  0.00 0  0 
4  600.00  599.00  0.00 0  0 
5  748.00  700.00  0  184.00 0 

如果我们试图(和A +总和B +总和C) - 信贷,数字将是一样的,但它会出现在A列,所以在我认为以上计算必须应用的所有头脑风暴之后。

有没有人有任何想法如何实现这一点。

任何帮助,将不胜感激。

+2

我不明白你在这里计算总运行逻辑。 –

+0

你不明白哪个逻辑? –

回答

1

SQL Server只支持从版本MSSQL 2012解析函数SUM() OVER,所以在2008年,这可能是查询您的结果的一种方法:

WITH table_name AS 
( 
    SELECT 1 ID, 000.00 Debit, 900.00 Credit, 0  a, 0  b, 1000.00  c UNION ALL 
    SELECT 2 ID, 450.00 Debit, 425.00 Credit, 0  a, 450.00 b, 0 c UNION ALL 
    SELECT 3 ID, 500.00 Debit, 490.00 Credit, 500.00 a, 0  b, 0 c UNION ALL 
    SELECT 4 ID, 600.00 Debit, 599.00 Credit, 600.00 a, 0  b, 0 c UNION ALL 
    SELECT 5 ID, 748.00 Debit, 700.00 Credit, 0  a, 748.00 b, 0 c 
) 
, 
sum_credit AS 
(
    SELECT SUM(credit) sumcredit 
    FROM table_name 
) 
SELECT t.id, t.debit, t.credit, 
    CASE WHEN a = 0 
      OR ((SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
       + a - sc.sumcredit < 0 
      ) 
     THEN 0 
     ELSE (SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
      + a - sc.sumcredit 
     END a, 
    CASE WHEN b = 0 
      OR ((SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
       + a + b - sc.sumcredit < 0 
      ) 
     THEN 0 
     ELSE (SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
      + a + b - sc.sumcredit 
     END b, 
    CASE WHEN c = 0 
      OR ((SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
       + a + b + c - sc.sumcredit < 0 
      ) 
     THEN 0 
     ELSE (SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
      + a + b + c - sc.sumcredit 
     END c 
FROM 
    table_name t 
CROSS JOIN 
    sum_credit sc; 
+0

@Pham令人难以置信的努力,非常感谢你!!!!!!!!!! –

+0

嗨范我想你的查询在我的实际代码,15 \t 2606.67 \t 0.00 \t 0.00 \t 0.00 1955.00 \t 0.00 \t 0.00 \t 1835.43 45.62 \t 0.00 \t 0.00 \t 1881.05 26.07 \t 0.00 \t 0.00 \t 1907.12 312.80 \t 0.00 \t 0.00 \t 2219.92 24196.50 \t 0.00 \t 0.00 \t 26416.42 26416.42是我想要的正确输出,但是之前的所有输出为什么它不转向0 –

+0

@RedDevil你能举一些例子,即哪个输出不会变为0(例如14个信用值x 0 0)?而且由于查询非常清楚,你能找出原因(负值,id不小于.....)吗? –