Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取所有不同(按ID)用户列表,并仅统计活动用户_Sql_Sql Server - Fatal编程技术网

Sql 获取所有不同(按ID)用户列表,并仅统计活动用户

Sql 获取所有不同(按ID)用户列表,并仅统计活动用户,sql,sql-server,Sql,Sql Server,我需要得到所有不同的用户列表,只统计那些活跃的用户 然后得到类似于 ID | Count | Active 1 | 0 | False 2 | 1 | True 3 | 6 | True 但当我这么做的时候 SELECT ID,COUNT(*) FROM Users WHERE Active='True' GROUP BY ID 我得到了所有明显的信息 ID | Count | Active 2 | 1 | True 3 | 6 | Tru

我需要得到所有不同的用户列表,只统计那些活跃的用户 然后得到类似于

ID | Count | Active
1  |  0    | False
2  |  1    | True
3  |  6    | True
但当我这么做的时候

SELECT ID,COUNT(*)
FROM Users 
WHERE Active='True'
GROUP BY ID
我得到了所有明显的信息

ID | Count | Active
2  |  1    | True
3  |  6    | True
如何编写查询以获取所需内容?

您想删除where子句。如果active仅接受值True、False和NULL,则这将起作用:

SELECT ID, COUNT(*) as cnt, MAX(Active)
FROM Users 
GROUP BY ID;
如果Active可以采用其他值,则您可能需要:

SELECT ID, COUNT(*) as cnt,
       (CASE WHEN SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END) > 0 THEN 'True' ELSE 'False' END) as Active
FROM Users 
GROUP BY ID;
您想删除where子句。如果active仅接受值True、False和NULL,则这将起作用:

SELECT ID, COUNT(*) as cnt, MAX(Active)
FROM Users 
GROUP BY ID;
如果Active可以采用其他值,则您可能需要:

SELECT ID, COUNT(*) as cnt,
       (CASE WHEN SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END) > 0 THEN 'True' ELSE 'False' END) as Active
FROM Users 
GROUP BY ID;

您需要将条件移动到聚合中:

SELECT ID, SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END)
FROM Users 
GROUP BY ID

您需要将条件移动到聚合中:

SELECT ID, SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END)
FROM Users 
GROUP BY ID
输出如下所示:

ID  count   Active
1   1   False
2   1   True
3   1   True
输出如下所示:

ID  count   Active
1   1   False
2   1   True
3   1   True

@德米特里霍尔金。这个问题最初被标记为mysql,所以我使用了mysql语法。@DmitrijHolkin。这个问题最初被标记为mysql,所以我使用了mysql语法。