我正在尝试创建一份报告,显示一年中每个月的销售数量。
我有一个查询返回每月销售的商品清单,它看起来像这样:
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
答案 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。