2014-03-24 74 views
0

我试图写在SQL Server查询抓住这些样本值:报告sql查询多个何在

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

sample report

我如何才能在一个SQL语句,这些价值观?

这里是样本输出 enter image description here

+1

如果其他列数据是按行计算的,那么究竟是什么总和?你能提供所需结果的样本吗? – keltar

+0

仍然没有得到它。总结一下?所有报告具有相同的状态? (并为每一行复制这笔金额?)。所有报告具有相同的名字/姓氏相同的状态? 'sum(all'是什么意思? – keltar

+0

我想要的人和每个状态的人的报告数量,状态数量1,状态数量2,状态数量3 –

回答

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答案是一般的好,它只是没有做你问什么,这是不具有对用户的所有状态计数一个单一的行。

+0

这个效果更好,因为它是每列,我只想要某些状态 –

0

听起来像是你将需要使用一个case语句

这很难决定你什么恰与问题,但case语句看起来是这样的:

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) 
1

貌似XY问题,我...

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

这就足够接近我想列出谢谢 –

+0

它可以完成使用通用表表达式的列,但是这是一个坏的方法 - 你必须知道可能的状态,对于行来说,它是不需要的 – keltar