代码之家  ›  专栏  ›  技术社区  ›  Gimly

如何在ReportingServices的列组中添加“缺少”列?

  •  2
  • Gimly  · 技术社区  · 14 年前

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

    我有一个查询,它返回每个月销售的商品列表,如下所示:

    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 回复  |  直到 14 年前
        1
  •  3
  •   a1ex07    14 年前
    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
  •  2
  •   Alex K.    14 年前

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