Как получить значения за все месяцы в T-SQL

У меня есть запрос, который я хотел бы отображать все месяцы за год, независимо от того, есть ли у них продажи за этот месяц или нет. Я знаю, что проблема связана с Group By, но как мне изменить запрос, чтобы он мне не нужен?

SELECT ISNULL(MONTH(sd.SBINDT),0) AS MonthSold, SUM(sd.SBQSHP) AS QtySold FROM dbo.SalesData sd WHERE sd.SBTYPE = 'O' AND sd.SBITEM = @Part AND YEAR(sd.SBINDT) = @Year AND sd.DefaultLocation = @Location GROUP BY MONTH(sd.SBINDT) 

Попробуй это:-

  SELECT M.Months AS MonthSold,D.QtySold as QtySold FROM ( SELECT distinct(MONTH(sd.SBINDT))as Months from dbo.SalesData sd)M left join ( SELECT MONTH(sd.SBINDT) AS MonthSold,SUM(sd.SBQSHP) AS QtySold FROM dbo.SalesData sd WHERE sd.SBTYPE = 'O' AND sd.SBITEM = @Part AND YEAR(sd.SBINDT) = @Year AND sd.DefaultLocation = @Location GROUP BY MONTH(sd.SBINDT) )D ON M.Months = D.MonthSold 

Сначала вам нужна таблица, которая имеет эти значения, и используйте ее для работы с LEFT JOIN с вашей таблицей SalesData :

 SELECT M.MonthNumber AS MonthSold, SD.QtySold FROM ( SELECT number AS MonthNumber FROM master.dbo.spt_values WHERE type = 'P' AND number BETWEEN 1 AND 12) M LEFT JOIN ( SELECT MONTH(SBINDT) MonthSold, SUM(SBQSHP) QtySold FROM dbo.SalesData WHERE SBTYPE = 'O' AND SBITEM = @Part AND YEAR(SBINDT) = @Year AND DefaultLocation = @Location GROUP BY MONTH(SBINDT)) SD ON M.MonthNumber = SD.MonthSold 

В моем ответе я использую таблицу spt_values чтобы получить 12 месяцев.

 SELECT MonthSold, ISNULL(SUM(sd.SBQSHP),0) AS QtySold FROM dbo.SalesData sd RIGHT OUTER JOIN (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) c(MonthSold) ON MonthSold = MONTH(SBINDT) WHERE sd.SBTYPE = 'O' AND sd.SBITEM = @Part AND YEAR(sd.SBINDT) = @Year AND sd.DefaultLocation = @Location GROUP BY MonthSold 
  • microsoft sql server 2012 express edition - ограничение одновременных вставок
  • Как предотвратить «истечение тайм-аута запроса»? (Ошибка SQLNCLI11 '80040e31')
  • Экземпляр по умолчанию для SQL Server 2012 не работает
  • Полнотекстовый поиск не работает, если включено стоп-слово, даже если стоп-лист пуст
  • Вставьте 2 значения из двух разных таблиц в одну таблицу
  • Как просмотреть запрос, который использовался для создания таблицы?
  • Почему я не могу подключиться к общему экземпляру SQL Server 2012 LocalDB?
  • Как выбрать все даты с 2002 по 2013 год в Microsoft Sql Server 2012
  • Недостаток узла главной таблицы, SQL Server 2012 SP1
  • Ошибка «Недопустимое имя столбца» при вызове вставки после создания таблицы
  • Создать отфильтрованный индекс, не работающий в SQL Server 2012 Express
  • Interesting Posts

    Сервисный брокер против нормальной работы монитора

    Как выбрать конкретные столбцы таблиц при экспорте с помощью мастера экспорта SQL Server?

    Количество рабочих дней между двумя датами

    sql server: есть ли способ получить последнюю запись, вставленную без хранимой процедуры?

    Анализ даты из неформатированного текста в SQL

    Получить участие по имени месяца

    Создание счетчиков объектов в Entity Framework и Sql Server

    Почему запрос НЕ использует мой индекс?

    Entity Framework 6 w / DatabaseGeneratedOption.Computed: в столбце не допускаются значения null. INSERT не работает

    Выполняется ли параллельное выполнение в SSIS?

    Как сравнить типы данных изображений в SQL Server

    Я должен разделить строку с «&» разделенными значениями без использования функции или хранимой процедуры?

    как использовать TableAdapterManager и связанные с ним данные в сочетании с SQL-запросами

    Нужно запустить сценарий оболочки на Linux-машине, которая использует sqlcmd, но на компьютере не установлен SQL Server 2008?

    Медленный запрос с динамическим предложением WHERE

    Давайте будем гением компьютера.