Sea*_*ean 5 sql t-sql sql-server
我有以下简单的查询,
SELECT US_LOGON_NAME as Username,
COUNT(I.IS_ISSUE_NO) as Issues
FROM ISSUES I JOIN USERS U ON I.IS_ASSIGNED_USER_ID = U.US_USER_ID
WHERE I.IS_RECEIVED_DATETIME BETWEEN 20110101000000 AND 20110107000000
GROUP BY U.US_LOGON_NAME;
Run Code Online (Sandbox Code Playgroud)
我想在选择列表中添加额外的COUNT()函数,但在某些条件下强加它们.这是以某种方式用CASE()语句完成的吗?我尝试在选择列表中放置Where子句,但似乎不允许这样做.我不确定这里是否真的需要子查询,但我不这么认为.
例如,我想要一个COUNT()函数,它只计算某个范围内的问题,然后计算另一个范围内的问题或其他各种条件等:
SELECT US_LOGON_NAME as Username,
COUNT(I.IS_ISSUE_NO (condition here)
COUNT(I.IS_ISSUE_NO (a different condition here)
Run Code Online (Sandbox Code Playgroud)
等等...
仍按登录名称分组.
谢谢.
ber*_*nie 10
SELECT
SUM(CASE WHEN I.IS_ISSUE_NO (condition here) THEN 1 ELSE 0 END) AS COND1
SUM(CASE WHEN I.IS_ISSUE_NO (condition here) THEN 1 ELSE 0 END) AS COND2
Run Code Online (Sandbox Code Playgroud)
几个解决方案.
您可以利用SQL不COUNT NULL值的事实:
SELECT US_LOGON_NAME as Username,
COUNT(CASE WHEN <cond> THEN I.IS_ISSUE_NO ELSE NULL END)
COUNT(CASE WHEN <other cond> THEN I.IS_ISSUE_NO ELSE NULL END)
. . .
Run Code Online (Sandbox Code Playgroud)
或者您可以使用SUM而不是COUNT:
SELECT US_LOGON_NAME as Username,
SUM(CASE WHEN <cond> THEN 1 ELSE 0 END)
SUM(CASE WHEN <other cond> THEN 1 ELSE 0 END)
. . .
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,您都可以根据需要重复多次.
| 归档时间: |
|
| 查看次数: |
11405 次 |
| 最近记录: |