0

我有一张看起来像这样的桌子

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

我想知道对于a in col1,什么是(C的行数 - D的行数)。

如果我要找到这两个数字,那就是

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

这是一种方法:

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 回答
1
select SUM(CASE WHEN col2 = 'C' THEN 1 WHEN col2 = 'D' THEN -1 ELSE 0 END) as Diff
from mytable
where col1 = 'a'
于 2013-06-07T18:38:35.390 回答
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 回答
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 回答