报告sql查询多个wheres

时间:2014-03-24 17:24:40

标签: sql sql-server

我正在尝试在sql server中编写一个查询以获取这些示例值:

firstname,
lastname,
count(reports where status =1),
count(reports where status =2)

sample report

如何在一个sql语句中获取这些值?

这是示例输出 enter image description here

3 个答案:

答案 0 :(得分:1)

对我来说看起来像XY问题......

select firstname, lastname, status, count(status)
from report
group by firstname, lastname, status
order by firstname, lastname, status

答案 1 :(得分:1)

我认为你也可以用PIVOT来完成它。我不确定你是否愿意:

DECLARE @tbl TABLE(UserName VARCHAR(10), Report VARCHAR(10), StatusId INT)
INSERT INTO @tbl VALUES ('bob','report1',1)
                       ,('bob','report2',1)
                       ,('bob','report3',2)
                       ,('jim','report2',1)
                       ,('joe','report3',3)


SELECT UserName, [1] Status1_Count,[2] Status2_Count,[3] Status3_Count
  FROM (SELECT UserName
              ,StatusId
              ,COUNT(*) ReportCount
          FROM @tbl 
         GROUP BY UserName
                 ,StatusId) src
 PIVOT (MAX(StatusId) 
        FOR StatusId IN ([1],[2],[3])) pvt

GROUP BY和COUNT答案通常更好,它只是没有按照你的要求进行,这是为了让用户在一行中具有所有状态。

答案 2 :(得分:0)

听起来你需要使用案例陈述

很难确定你的问题究竟是什么,但案例陈述看起来像这样:

  sum(CASE WHEN status = 1 THEN reports ELSE 0 END),
  sum(CASE WHEN status = 2 THEN reports ELSE 0 END),
  sum(CASE WHEN status = 1 THEN 1 ELSE 0 END),
  sum(CASE WHEN status = 2 THEN 1 ELSE 0 END)