Как добавить «пропущенные» столбцы в группу столбцов в службах отчетов? - PullRequest
2 голосов
/ 10 мая 2010

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

У меня есть запрос, который возвращает список товаров, проданных за каждый месяц, это выглядит примерно так:

SELECT Seller.FirstName, Seller.LastName, SellingHistory.Month, SUM(SellingHistory.QuantitySold)
FROM SellingHistory JOIN Seller on SellingHistory.SellerId = Seller.SellerId
WHERE SellingHistory.Year = @Year
GOUP BY Seller.FirstName, Seller.LastName, SellingHistory.Month

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

Seller Name | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Total

Мне удалось использовать матрицу и группу столбцов (группа по месяцам) для отображения столбцов для существующих данных. Если у меня есть данные с января по март, будут отображаться 3 первых столбца и общая сумма. То, что я хотел бы сделать, это всегда отображать все столбцы.

Я думал об этом, добавляя пропущенные месяцы в запрос SQL, но я нахожу это немного странным, и я уверен, что должно быть какое-то «самое чистое» решение, поскольку это должно быть довольно часто.

Спасибо.

PS: я использую SQL Server Express 2008

Ответы [ 2 ]

3 голосов
/ 10 мая 2010
SELECT Seller.Id,
SUM(CASE WHEN SellingHistory.Month = 'Jan' THEN SellingHistory.QuantitySold END ) AS Jan,
SUM(CASE WHEN SellingHistory.Month = 'Feb' THEN SellingHistory.QuantitySold END ) AS Feb,
...
GROUP BY Seller.Id

Вы также можете использовать PIVOT (дважды проверьте синтаксис, я думаю, что следующий запрос в порядке, но я некоторое время не работал с Transact SQL):

SELECT Seller.Id, Jan, Feb, ...
FROM ...
PIVOT (SUM(SellingHistory.QuantitySold) FOR SellingHistory.Month IN (
  [Jan],[Feb],....)) AS t;
2 голосов
/ 10 мая 2010

Чтобы сделать это в T-SQL, вам нужен PIVOT, есть пример использования месяцев в середине страницы здесь .

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