我有一个“用户”表格如下
User_Id User_Name Case_Id Create_Date Close_date
--------------------------------------------------------
1 abc 65473 2018-03-14 2018-03-15
2 xyz 43526 2018-03-14 NULL
3 gst 49088 2018-03-11 NULL
我想显示如下输出,也应该显示当天没有开箱的用户(2018-03-16)
User_ID User_Name Case_Count
1 abc 0
2 xyz 1
3 gst 1
我写了下面的查询来实现这个
select user_name,isnull(count(CASE_ID),'0') as case_id from users where CLOSE_DATE is NULL group by user_name
但我没有得到我想要的输出,而是我得到了这个
User_ID User_Name Case_Count
2 xyz 1
3 gst 1
有人可以帮我解决这个问题,因为我是SQL Server新手
答案 0 :(得分:1)
听起来你想要一个仍然开放的案例数量的条件SUM?
在这种情况下,您只想包含CLOSE_DATE IS NULL
但不想忽略CLOSE_DATE IS NOT NULL
行的情况计数,只显示其总数为0:
SELECT
user_name,
SUM(CASE WHEN CLOSE_DATE IS NULL THEN 1 ELSE 0 END) AS CASE_COUNT
FROM users
GROUP BY user_name;
修改强> 您的结果集中似乎有user_id,但源查询似乎没有,因此可能要包括...
SELECT
user_id,
user_name,
SUM(CASE WHEN CLOSE_DATE IS NULL THEN 1 ELSE 0 END) AS CASE_COUNT
FROM users
GROUP BY user_id, user_name;
答案 1 :(得分:0)
由于你有where CLOSE_DATE is NULL
,所以你不会得到第一行,因为它有一个关闭日期的值。
将您的查询更改为以下内容以使其正常工作:
select user_name,count(isnull(CASE_ID),'0') as case_id from users group by user_name