Помощь в запросах SQL Join - PullRequest
1 голос
/ 07 января 2012

В настоящее время у меня есть 2 запроса:

SELECT dateadd(month, x.MonthOffset,0) as [Month], SUM(x.itemcount) as [Total] FROM
    ( SELECT datediff(month,0, cna.impdate) as MonthOffset, count(*) as itemcount FROM myTable
      WHERE (emergency = 'Emergency') AND (impdate BETWEEN '" + fromDate + "' AND '" + toDate + "') 
      GROUP BY impdate ) x
      GROUP BY MonthOffset ORDER BY MonthOffset asc

SELECT dateadd(month, x.MonthOffset,0) as [Month], SUM(x.itemcount) as [Total] FROM
    ( SELECT datediff(month,0, cna.impdate) as MonthOffset, count(*) as itemcount FROM myTable
      WHERE (impdate BETWEEN '" + fromDate + "' AND '" + toDate + "') 
      GROUP BY impdate ) x
      GROUP BY MonthOffset ORDER BY MonthOffset asc

Это вернет 2 столбца данных с ежемесячным количеством элементов.

Моя проблема возникает, когда существует месяц без элемента экстренной помощи. Поскольку я передаю объект во второй запрос, если число столбцов, извлеченных из первого, не совпадает со вторым, я получу сообщение об ошибке индекса вне границ.

Как я могу объединить два моих запроса, чтобы у меня было 3 столбца - месяц, итоговая сумма и итоговая сумма? Аварийный итог может быть 0 или ноль.

1 Ответ

5 голосов
/ 07 января 2012

У меня нет способа проверить это, но я думаю, что это должно дать вам то, что вы ищете:

SELECT dateadd(month, datediff(month,0, cna.impdate),0) as [Month], 
       count(*) as itemcount, 
       SUM(CASE WHEN emergency = 'Emergency' THEN 1 ELSE 0 END) AS EmergencyCount
FROM myTable
WHERE impdate BETWEEN '" + fromDate + "' AND '" + toDate + "'
GROUP BY dateadd(month, datediff(month,0, cna.impdate),0)
ORDER BY [Month] asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...