Cad*_*dab 2 sql sql-server sql-server-2008
我有一个表,其中包含每个项目的开始日期
例如:
ID - Startdate
1 - 2011-01-01
2 - 2011-02-01
3 - 2011-04-01
...
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,它会给我每个月内每个项目的计数,我需要一个完整的12个月的报告.我试着简单地按照分组进行分组,Month(StartDate)但是对于没有值的月份,这并没有给我一个零,在上面的情况下,为3月.
所以我希望输出是沿着......
Month - Count
1 20
2 14
3 0
...
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢.
SELECT A.Month, ISNULL(B.countvalue,0) Count
FROM (SELECT 1 AS MONTH
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
UNION
SELECT 10
UNION
SELECT 11
UNION
SELECT 12 ) A LEFT JOIN (SELECT datepart(month,Startdate) AS Month, Count(ID) as countvalue FROM yourTable GROUP BY datepart(month,Startdate))B
ON A.month = B.month
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
使用SQL Server 2005+或执行此操作的另一种方法Oracle.
;WITH q (Month) AS (
SELECT 1
UNION ALL
SELECT Month + 1
FROM q
WHERE q.Month < 12
)
SELECT q.Month
, COUNT(i.ID)
FROM q
LEFT OUTER JOIN Input i ON MONTH(i.StartDate) = q.Month
GROUP BY
q.Month
Run Code Online (Sandbox Code Playgroud)
;WITH Input (ID, StartDate) AS (
SELECT 1, '2011-01-01'
UNION ALL SELECT 2, '2011-02-01'
UNION ALL SELECT 3, '2011-04-01'
)
, q (Month) AS (
SELECT 1
UNION ALL
SELECT Month + 1
FROM q
WHERE q.Month < 12
)
SELECT q.Month
, COUNT(i.ID)
FROM q
LEFT OUTER JOIN Input i ON MONTH(i.StartDate) = q.Month
GROUP BY
q.Month
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |