3

我陷入了使用 GROUP BY 后需要从两行添加列的场景中。我的查询如下:

select AcctId,DC,sum(TrnAmt) from TableId
group by AcctId,DC
order by AcctId,DC

结果:-

VcrAcctId      DrCr  SumTranAmt
51            C    37469
51      D      37000

我的预期结果是:

VcrAcctId      Actual
51     37469-37000

如何在同一个查询中得到我的预期结果?

4

2 回答 2

1

这是假设 Actual 在 DrCR 上排序,因此 C 结果行位于 D 结果行之前。此外,将 Table1 替换为原始查询中的 CTE,以便您首先总结每个 VcrAcctId 和 DC。

SELECT VcrAcctId, STUFF((SELECT '-' + convert(varchar(100),SumTranAmt)
              FROM Table1 I
              WHERE Table1.VcrAcctId = I.VcrAcctID 
              ORDER BY DrCr
             FOR XML PATH ('')),1,1,'')
FROM Table1
Group by VcrAcctId

SQL 小提琴演示

于 2012-12-15T12:56:09.147 回答
1

根据评论中的讨论,我认为您需要

SELECT AcctId,
       Sum(CASE DC
             WHEN 'C' THEN TrnAmt
             WHEN 'D' THEN -TrnAmt
             ELSE 0
           END) AS DC
FROM   TableId
GROUP  BY AcctId
ORDER  BY AcctId 

如果实际上您确实希望将贷方和借方分开,则可以使用

SELECT AcctId,
       Sum(CASE
             WHEN DC = 'C' THEN TrnAmt
             ELSE 0
           END) AS C,
       Sum(CASE
             WHEN DC = 'D' THEN TrnAmt
             ELSE 0
           END) AS D
FROM   TableId
GROUP  BY AcctId
ORDER  BY AcctId 

如果这是实际需要的,您可以将SUM表达式转换为并将它们连接起来以获得问题中显示的结果。varchar

于 2012-12-15T13:15:33.883 回答