【问题标题】:Want a select query where database data represented as column name想要一个选择查询,其中数据库数据表示为列名
【发布时间】:2016-02-18 10:32:18
【问题描述】:

我有一个名为 sales 的数据库表。

| ID  |  Group  |   Month  | Amt |
____________________________________
 1    | Y       | Dec-2015 | 300
___________________________________
 2    | Z       | Dec-2015 | 250
___________________________________
 1    | Y       | Nov-2015 | 320
____________________________________
 2    | Z       | Nov-2015 | 430

我想输出如下表

| ID  |  group  | Dec-2015| Nov-2015
___________________________________
 1    | Y       |    300  |  320
___________________________________
 2    | Z       |   250   |  430
____________________________________

我希望你现在得到我的要求。我不太擅长 Sql。我希望你能帮助,提前谢谢。

【问题讨论】:

  • 如果 2014 年 10 月的值突然出现在您的表格中,预期的结果是什么?
  • 搜索动态轴

标签: sql sql-server database select


【解决方案1】:

试试

SELECT 
    * 
FROM
(
    SELECT ID, GROUP, MONTH, AMT
) p
PIVOT
(
    SUM(AMT) FOR MONTH IN ([Dec-2015], [Nov-2015])
) AS pvt

这会将行作为列,然后:

SELECT 
    ID, Group, SUM([Dec-2015]), SUM([Nov-2015])
FROM
(
    SELECT ID, GROUP, MONTH, AMT
) p
PIVOT
(
    SUM(AMT) FOR MONTH IN ([Dec-2015], [Nov-2015])
) AS pvt
GROUP BY
    ID,
    GROUP

IDGroup 汇总金额和分组。

【讨论】:

  • 非常感谢,它正在工作。但我得到了多个 id 和 row。表示每一行是一个月,其他行为空。就像显示 2015 年 12 月和 2015 年 11 月的 AMT 为 null 一样,在下一行显示 2015 年 11 月和 2015 年 12 月的 AMT 为 null。
  • 我已将其更改为包含聚合。它可能在SUM 语句周围包含IFNULL,但应该可以工作。
猜你喜欢
  • 2020-05-14
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多