我正在尝试创建一个报告,显示一年中每个月的销售商品数量。
我有一个查询,返回每个月销售的商品列表,它看起来像这样:
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
最佳答案
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;
关于sql-server - 如何在报告服务的列组中添加 "missing"列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2804052/