我遇到了一个场景,我需要在使用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
如何在同一查询中获得预期结果?
答案 0 :(得分:1)
这假设在DrCR上订购了Actual,因此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
答案 1 :(得分: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
并连接它们以获得问题中显示的结果,如果这是实际需要的。