3

GROUP BYを使用した後、2行から列を追加する必要があるシナリオで行き詰まりました。私のクエリは次のようになります:

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 に答える