我对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]
感谢您的帮助!
答案 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)
您应该尝试使用嵌套的SELECT
和GROUP BY
。 COUNT
将确保您还捕获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)