如何在报表服务的列组中添加“缺少”列?

时间:2010-05-10 15:42:11

标签: sql-server sql-server-2008 reporting-services

我正在尝试创建一份报告,显示一年中每个月的销售数量。

我有一个查询返回每月销售的商品清单,它看起来像这样:

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

我设法做的是使用矩阵和列组(月份组)来显示现有数据的列,如果我有1月到3月的数据,它将显示3个第一列和总数。我想做的是始终显示所有列。

我想通过在SQL请求中添加缺少的月份来实现这一点,但我发现有点奇怪,我确信必须有一些“最干净”的解决方案,因为这是必须经常发生的事情。

感谢。

PS:我正在使用SQL Server Express 2008

2 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:2)

要在T-SQL中执行此操作,您需要PIVOT,有一个示例使用页面中间的几个月here