SQL Server语句输出
问题描述:
我有以下表结构SQL Server语句输出
TicketID Status Duration
-----------------------------
1234 8 2
1233 8 10
1232 4 5
1231 8 12
1230 4 50
- 状态8所表示关闭
- 状态4指开
它需要有输出方式如下。请只做那些需要的。如果可能的话,我希望它在一个单一的SQL查询。
请帮助我以下列方式生成输出。
Status Closed (sum) Open(Sum)
---------------------------------
8 24 0
4 0 55
答
一个case
表达可以过滤掉不需要的值,所以这可以在一个单一的汇总查询来完成:
SELECT status,
SUM (CASE status WHEN 8 THEN duration ELSE 0 END) AS closed_sum,
SUM (CASE status WHEN 4 THEN duration ELSE 0 END) AS open_sum
FROM my_table
GROUP BY status
答
select status
, sum(case when status = 4 then Duration else 0 end) as [Open(sum)]
, sum(case when status = 8 then Duration else 0 end) as [Closed(sum)]
from @test
group by status
order by status desc
答
WITH T AS (SELECT Status, SUM(Duration) AS Duration FROM Table1 GROUP BY Status)
SELECT Status, Duration, 0 FROM T WHERE Status = 8
UNION ALL
SELECT Status, 0, Duration FROM T WHERE Status = 4
+0
生成EXACT预期输出。我知道WITH部分提供了所有需要的信息。 UNION部分是在问题中产生EXPECTED输出。请参阅问题中的格式。 – CrimsonKing 2014-12-04 07:56:45
答
使用UNION ALL
SELECT [Status],sum([Duration]) [Closed(sum)], '0' as [Open(Sum)]
from [dbo].[tblx]
where [Status]=8
GROUP BY [Status]
UNION all
SELECT [Status], '0' as [Closed(sum)],sum([Duration]) [Close(sum)]
from [dbo].[tblx]
WHERE [Status]=4
GROUP BY [Status]
欢迎使用StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后在编辑器工具栏上单击“代码示例”按钮(“{}”)格式和语法突出显示它! – 2014-12-04 06:52:53
你有什么尝试吗?阅读http://msdn.microsoft.com/en-us/library/ms177673.aspx和http://msdn.microsoft.com/en-us/library/ms177673.aspx – 2014-12-04 06:56:49
@SandipkTatva您可能正在寻找'GROUP如果你的实际情况比你发布的内容更复杂(比如现实中有更多的状态等),你可以在http://technet.microsoft.com/en-us上找到“BY”(上面注释中的链接)或“PIVOT”。 /library/ms177410%28v=sql.105%29.aspx和http://stackoverflow.com/questions/24470/sql-server-pivot-examples – Ruslan 2014-12-04 07:45:14