Ежемесячная сводка по SQL - PullRequest
       1

Ежемесячная сводка по SQL

2 голосов
/ 10 августа 2011

У меня есть таблица, которая содержит начальную дату для каждого элемента

например:

ID - Startdate
1  - 2011-01-01
2  - 2011-02-01
3  - 2011-04-01
...

Мне нужен запрос, который даст мне счет каждого элемента в течение каждого месяца, мне нужен полный отчет за 12 месяцев. Я попытался просто сгруппировать по Month(StartDate), но это не дает мне ноль для месяцев без значений, в случае выше, для марта.

так что я бы хотел, чтобы выходные данные были такими же, как у ..

Month - Count
  1      20
  2      14
  3      0
...

Есть идеи?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 10 августа 2011

Другой способ сделать это с помощью SQL Server 2005+ или Oracle.

SQL Statement

;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

Тестовый скрипт

;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
5 голосов
/ 10 августа 2011
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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...