我有表格,看起来像这样
col1, col2
a,C
a,D
a,C
a,D
我想知道col1
中 a 的内容是什么( 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
但这似乎不起作用。有什么建议?
答案 0 :(得分: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'
答案 1 :(得分:1)
select SUM(CASE WHEN col2 = 'C' THEN 1 WHEN col2 = 'D' THEN -1 ELSE 0 END) as Diff
from mytable
where col1 = 'a'
答案 2 :(得分:0)
SELECT sum(CASE WHEN COL2='D' THEN 1 ELSE -1 END) as balance
FROM mytable
答案 3 :(得分: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
答案 4 :(得分:0)
感谢大家的快速回复。对我来说,以下代码片段有效。
SUM( CASEWHEN (COL2='D', 1, -1))
这是一个稍微全面的版本
SUM( CASE WHEN COL2='C' THEN -1 WHEN COL2='D' THEN 1 ELSE 0 END)
我会推荐更全面的版本。