【问题标题】:Transpose select data into column name and sum up using different criteria-MS Sql将选择数据转置为列名并使用不同的标准求和-MS Sql
【发布时间】:2015-12-22 22:43:52
【问题描述】:

我正在编写这份报告,我必须总结和转置我在几次查询后构建的临时表中的数据。表数据看起来像这样 http://sqlfiddle.com/#!6/570b1/1

我想做的是,将月份作为列,即我将从查询结果中添加 12 个其他列,如下所示

2015 年 12 月,2016 年 1 月.....2016 年 12 月。基本上提前12个月。此外,在每个月下,它将显示预测列的总和(仅针对该月)。最后,每个 ID 的全年总和。

感谢您提供一些实现这一目标的指导。

谢谢。

【问题讨论】:

  • 请发布预期结果。
  • 嗨 Felix,我的预期结果应该是这样的 sqlfiddle.com/#!6/b2c0b/1 基本上,我总结了每个月的预测列,并将其显示在表格(日历)视图中。
  • 我相信我已经找到了解决方案。

标签: sql-server pivot-table transpose


【解决方案1】:

我已经为此查询提出了解决方案,但不确定这是否是最有效的方法。此外,我的月份和年份是静态的。这使得这个查询不是很有用。请参阅下面的查询,并将您的 cmets 发送给我。

SELECT Description, ComponentDescription,
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Dec2015' THEN Forecast ELSE 0 END ) AS 'Dec2015',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Jan2016' THEN Forecast ELSE 0 END ) AS 'Jan2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Feb2016' THEN Forecast ELSE 0 END ) AS 'Feb2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Mar2016' THEN Forecast ELSE 0 END ) AS 'Mar2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Apr2016' THEN Forecast ELSE 0 END ) AS 'Apr2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'May2016' THEN Forecast ELSE 0 END ) AS 'May2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Jun2016' THEN Forecast ELSE 0 END ) AS 'Jun2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Jul2016' THEN Forecast ELSE 0 END ) AS 'Jul2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Aug2016' THEN Forecast ELSE 0 END ) AS 'Aug2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Sep2016' THEN Forecast ELSE 0 END ) AS 'Sep2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Oct2016' THEN Forecast ELSE 0 END ) AS 'Oct2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Nov2016' THEN Forecast ELSE 0 END ) AS 'Nov2016',
SUM(CASE WHEN FMonth+CAST(YearOrder AS NVARCHAR(10)) = 'Dec2016' THEN Forecast ELSE 0 END ) AS 'Dec2016'

FROM (SELECT Description, ComponentDescription, FMonth, Forecast, YearOrder FROM Table1 ) AS NormalizedData
GROUP BY Description, ComponentDescription
ORDER BY Description, ComponentDescription;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2017-06-09
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多