sql-server - 如何在报告服务的列组中添加 "missing"列?

标签 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

我设法做的是使用矩阵和列组(月份组)来显示现有数据的列,如果我有从一月到三月的数据,它将显示前 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/

相关文章:

java - 难以使用SQLserver jdbc连接到数据库

sql - 将逗号分隔的SQL数据转为SQL "in"指令

sql - 条件 WHERE 语句 SQL Server

sql - SELECT CASE WHEN NULL 出现意外结果

visual-studio-2010 - MVC3 - SSRS 报告 (rdlc) 和业务对象数据源

sql - 如何从表中删除重复添加的日志?

sql - CHECK 约束不起作用

Sql 在每个分类中获取前 2 个结果

c# - 无法加载文件或程序集 'Microsoft.ReportViewer.Common,版本 = 11.0.0.0

asp.net - 使用 .NET 报告查看器打开远程 RDL