编写一个SQL查询,显示每月和每年过滤的字段“状态”的总结果

时间:2015-10-10 10:29:17

标签: sql sql-server

我对SQL有基本的了解,但在更复杂的查询中需要一些帮助。

我想获得每个不同“状态”的总数:'有效''等待用户信息'| '封闭'| '新'| '解决'

这是我想要显示的列/结果: 按年份= 2015过滤票证的月份,以及每个状态的总计数

['月'| '活跃'| '等待用户信息'| '封闭'| '新'| '解决']

即使结果为0,我也希望修复列。

这是我的表

CREATE TABLE [dbo].[Incidents](
[Number] [varchar](50) NULL,
[DateOpened] [datetime] NULL,
[Severity] [varchar](50) NULL,
[Priority] [varchar](50) NULL,
[Status] [varchar](50) NULL
) ON [PRIMARY]

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

select month(DateOpened),
       sum(case when status = 'Active' then 1 else 0 end) as [Active],
       sum(case when status = 'Awaiting User Info' then 1 else 0 end) as [Awaiting User Info],
       sum(case when status = 'Closed' then 1 else 0 end) as [Closed],
       sum(case when status = 'New' then 1 else 0 end) as [New],
       sum(case when status = 'Resolved' then 1 else 0 end) as [Resolved]
from incidents
where year(DateOpened) = 2015
group by month(DateOpened)

如果您想要所有月份,即使没有特定的记录,那么您可以将该表连接到一个联合的月份名称列表

答案 1 :(得分:0)

您应该尝试使用嵌套的SELECTGROUP BYCOUNT将确保您还捕获0值。注意字段和表别名:

    SELECT X.M, A.Act as Active, 
           AUI.Await as Awaiting_User_Info, 
           C.Clo as Closed, N.Ne as New R.Res as Resolved 
    FROM   (SELECT MONTH(DateOpened) as M
            FROM Incidents
            GROUP BY MONTH(DateOpened) ) X
    LEFT JOIN
           (SELECT MONTH(DateOpened) as M, 
                   COUNT(*) AS Act 
            FROM Incidents 
            WHERE Status = 'Active' 
            GROUP BY M) A
    ON X.M = A.M LEFT JOIN 
           (SELECT MONTH(DateOpened) as M, 
                   COUNT(*) AS Await 
            FROM Incidents 
            WHERE Status = 'Awaiting User Info' 
            GROUP BY MONTH) AUI
    ON X.M = AUI.M LEFT JOIN 
           (SELECT MONTH(DateOpened) as M, 
            COUNT(*) AS Clo 
            FROM Incidents 
            WHERE Status = 'Closed' GROUP BY MONTH) C
    ON X.M = C.M  LEFT JOIN 
           (SELECT MONTH(DateOpened) as M, 
                   COUNT(*) AS Ne 
            FROM Incidents 
            WHERE Status = 'New' 
            GROUP BY MONTH) N
    ON X.M = N.M LEFT JOIN  
           (SELECT MONTH(DateOpened) as M, 
                   COUNT(*) AS Res 
            FROM Incidents 
            WHERE Status = 'Resolved' 
            GROUP BY MONTH) N
    ON X.M = R.M

答案 2 :(得分:0)

我认为,它会对你有所帮助!

"abc".Substring(3 - 5)
相关问题