Sql server SQL Server查询每月总计
我有一个查询,它汇总了2010年1月1日活动的所有案例Sql server SQL Server查询每月总计,sql-server,totals,Sql Server,Totals,我有一个查询,它汇总了2010年1月1日活动的所有案例 SELECT COUNT(CaseID) AS Total FROM dbo.ClientCase WHERE (CaseStartDate <= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) AND (CaseClosedDate >= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) OR (CaseC
SELECT COUNT(CaseID) AS Total
FROM dbo.ClientCase
WHERE (CaseStartDate <= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) AND (CaseClosedDate >= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) OR (CaseClosedDate IS NULL)
GROUP BY CaseStartDate
假设日历有两列,例如
MonthName
和FirstDate
,那么您需要s/之类的内容
Month Total
Jan 102
Feb 130
Mar 145
.....
Dec 162
SELECT Calendar.MonthName AS Month, COUNT(ClientCase.CaseId) AS Total,
FROM ClientCase
JOIN Calendar
ON (MONTH(Calendar.FirstDate) = MONTH(ClientCase.CaseStartDate))
GROUP BY Calendar.MonthName
选择cal.MonthName,计数(CaseID)作为总计
从dbo.calendarTable cal
左外部联接dbo.ClientCase cc
月(cal.MonthStartDate)=月(CaseStartDate)
哪里
(CaseStartDate=转换(日期时间,cal.MonthStartDate,102))或
(CaseClosedDate为空)
cal.MonthName集团
- 左外连接,以确保获得所有月份,包括0个案例
SELECT
MONTH(CaseStartDate), COUNT(CaseID) AS Total
FROM
dbo.ClientCase
WHERE
(CaseStartDate <= CONVERT(DATETIME, '2010-01-01 00:00:00', 102))
AND (CaseClosedDate >= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) OR
(CaseClosedDate IS NULL)
GROUP BY
MONTH(CaseStartDate)
选择
月份(CaseStartDate),计数(CaseID)为总数
从…起
dbo.ClientCase
哪里
(CaseStartDate=CONVERT(日期时间,'2010-01-01 00:00:00',102))或
(CaseClosedDate为空)
分组
月份(案例开始日期)
这应该会给你一个非常接近的输出(数字月而不是一月,二月等-但足够接近)
通过此附加步骤,您将获得每个月名称的前三个字母:
SELECT
SUBSTRING(DATENAME(MONTH, CaseStartDate), 1, 3) AS 'Month',
COUNT(CaseID) AS Total
FROM
dbo.ClientCase
WHERE
(CaseStartDate <= CONVERT(DATETIME, '2010-01-01 00:00:00', 102))
AND (CaseClosedDate >= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) OR
(CaseClosedDate IS NULL)
GROUP BY
MONTH(CaseStartDate), SUBSTRING(DATENAME(MONTH, CaseStartDate), 1, 3)
ORDER BY
MONTH(CaseStartDate)
选择
子字符串(DATENAME(MONTH,CaseStartDate),1,3)为“MONTH”,
将(案例ID)计为总数
从…起
dbo.ClientCase
哪里
(CaseStartDate=CONVERT(日期时间,'2010-01-01 00:00:00',102))或
(CaseClosedDate为空)
分组
月(CaseStartDate),子字符串(DATENAME(月,CaseStartDate),1,3)
订购人
月份(案例开始日期)
您能否指出您试图通过此查询完成的任务?我的第一个想法是,您可能不需要日历表,而是可以使用SQL日期函数(月、年等)。@adrift-我有各种查询,可以计算出一个月初打开了多少个案例,一个月内关闭了多少个案例,以及一个月内创建了多少个案例。如果你看一下我上面的第一个例子,上面列出了未结案件的总数,它符合我的要求,但只适用于2010年1月1日。我需要第一个查询中的日期来遍历一年中的其他11个月。你的答案与我所需要的最接近。非常感谢你的帮助。
SELECT
SUBSTRING(DATENAME(MONTH, CaseStartDate), 1, 3) AS 'Month',
COUNT(CaseID) AS Total
FROM
dbo.ClientCase
WHERE
(CaseStartDate <= CONVERT(DATETIME, '2010-01-01 00:00:00', 102))
AND (CaseClosedDate >= CONVERT(DATETIME, '2010-01-01 00:00:00', 102)) OR
(CaseClosedDate IS NULL)
GROUP BY
MONTH(CaseStartDate), SUBSTRING(DATENAME(MONTH, CaseStartDate), 1, 3)
ORDER BY
MONTH(CaseStartDate)