我想进行一个查询,在该查询中我可以计算给定列的具有至少1个真值的ID数量,并一次对多个列执行此操作。
例如,我有一个这样的数据库:
Table1
Name col_1 col_2
A true true
A false true
B false false
C true false
C true false
Table2
Name ID
A 1
B 2
C 3
我本质上想算出某个ID为true的列有多少个ID(结果显示如下):
Row col_1_true col_2_true
1 2 1
对于单列,我可以做:
SELECT
COUNT(DISTINCT ID, col_1) as col_1_true
FROM table1, table2
WHERE table1.Name = table2.Name
col_1 = true
但是我想从单个查询的最终输出中获得所有所需的计数(因为我的实际数据集有很多列,我想定期查询),所以如下所示:
SELECT
COUNT(DISTINCT ID, col_1 = true) as col_1_true
COUNT(DISTINCT ID, col_2 = true) as col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
我尝试了许多方法,这些方法大致如下:
SUM(DISTINCT ID, CASE WHEN col_1 = true THEN 1 ELSE 0 END)
抛出错误(函数SUM的参数过多),或者
SELECT
SUM(
CASE WHEN col_1 = true
THEN 1 ELSE 0 END)
AS col_1_true,
SUM(
CASE WHEN col_2 = true
THEN 1 ELSE 0 END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name
GROUP BY table2.ID
哪个没有提供适当的输出。它的输出是:
Row col_1_true col_2_true
1 1 1
2 0 1
3 0 0
4 1 0
5 1 0
我认为我可能必须引入子查询和/或子表,但是不确定如何进行。
答案 0 :(得分:1)
在tsql中,它将类似于:
SELECT
COUNT(DISTINCT
CASE WHEN col_1 = true
THEN table2.ID END)
AS col_1_true,
COUNT(DISTINCT
CASE WHEN col_2 = true
THEN table2.ID END)
AS col_2_true
FROM table1, table2
WHERE table1.Name = table2.Name