0

私はこのようなテーブルを持っています

col1, col2
a,C
a,D
a,C
a,D 

a inの場合、( Cの行数 - Dcol1の行数)とは何かを知りたいです。

私が2つの数字を見つけるとしたら、それは単に

SELECT COUNT(1) FROM mytable where COL1='a' and COL2='C'
SELECT COUNT(1) FROM mytable where COL1='a' and COL2='D'

そして、私は違いを見つけることができました。

ただし、単一のクエリで実行したかったのです。だから私はこれに行きました

SELECT COUNT(CASEWHEN(COL2)='D', 1, -1) 
FROM mytable 

しかし、それはうまくいかないようです。助言がありますか?

4

5 に答える 5

3

1 つの方法を次に示します。

SELECT  SUM(CASE WHEN col2 = 'C' THEN 1 ELSE 0 END) Col2C,
        SUM(CASE WHEN col2 = 'D' THEN 1 ELSE 0 END) Col2D,
        SUM(CASE WHEN col2 = 'C' THEN 1 WHEN col2 = 'D' THEN -1 ELSE 0 END) [Col2C-Col2D]
FROM myTable
WHERE col1 = 'a'
于 2013-06-07T18:34:02.377 に答える
0

迅速な対応に感謝します。私にとっては、次のコード スニペットが機能しました。

SUM( CASEWHEN (COL2='D', 1, -1))

そして、これの少し完全なバージョンは

SUM( CASE WHEN COL2='C' THEN -1 WHEN  COL2='D' THEN 1  ELSE 0 END)

フルバージョンをお勧めします。

于 2013-06-10T11:46:34.973 に答える
0
SELECT sum(CASE WHEN COL2='D' THEN 1 ELSE -1 END) as balance
FROM mytable 
于 2013-06-07T18:33:43.693 に答える
0

あなたは正しい軌道に乗っていました、これはうまくいくはずです:

SELECT col1, SUM(CASE WHEN COL2 ='C' THEN 1 ELSE 0 END) - SUM(CASE WHEN COL2 ='D' THEN 1 ELSE 0 END)
FROM mytable 
GROUP BY col1
于 2013-06-07T18:33:54.930 に答える