我试图写在SQL Server查询抓住这些样本值:报告sql查询多个何在
firstname,
lastname,
count(reports where status =1),
count(reports where status =2)
我如何才能在一个SQL语句,这些价值观?
这里是样本输出
我试图写在SQL Server查询抓住这些样本值:报告sql查询多个何在
firstname,
lastname,
count(reports where status =1),
count(reports where status =2)
我如何才能在一个SQL语句,这些价值观?
这里是样本输出
我认为你也可以用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答案是一般的好,它只是没有做你问什么,这是不具有对用户的所有状态计数一个单一的行。
这个效果更好,因为它是每列,我只想要某些状态 –
听起来像是你将需要使用一个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)
貌似XY问题,我...
select firstname, lastname, status, count(status)
from report
group by firstname, lastname, status
order by firstname, lastname, status
这就足够接近我想列出谢谢 –
它可以完成使用通用表表达式的列,但是这是一个坏的方法 - 你必须知道可能的状态,对于行来说,它是不需要的 – keltar
如果其他列数据是按行计算的,那么究竟是什么总和?你能提供所需结果的样本吗? – keltar
仍然没有得到它。总结一下?所有报告具有相同的状态? (并为每一行复制这笔金额?)。所有报告具有相同的名字/姓氏相同的状态? 'sum(all'是什么意思? – keltar
我想要的人和每个状态的人的报告数量,状态数量1,状态数量2,状态数量3 –