SQL Server查询根据案例计数

时间:2018-03-16 10:19:45

标签: sql sql-server count isnull

我有一个“用户”表格如下

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新手

2 个答案:

答案 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