SQL Server语句输出

SQL Server语句输出,sql,sql-server,Sql,Sql Server,我有以下表格结构 TicketID Status Duration ----------------------------- 1234 8 2 1233 8 10 1232 4 5 1231 8 12 1230 4 50 状态8表示关闭 状态4意味着开放 它需要以以下方式输出。请做必要的事。如果可能的话,我希望它出现在一个

我有以下表格结构

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
使用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或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示它!你试过什么吗?Read and@SandipkTatva您可能正在寻找上面评论中发布的分组链接,或者如果您的实际案例比您发布的更复杂,即现实中有更多的状态等,您可能正在寻找PIVOT,以产生准确的预期输出。我知道WITH部分提供了所需的所有信息。联合部分是产生问题中的预期产出。请参阅问题中的格式。
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
    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]