【问题标题】:Sql statement to transform a column to table header将列转换为表头的 Sql 语句
【发布时间】:2017-08-11 21:52:28
【问题描述】:

这是我的示例表

CustomerName|Items customer 1 |Item 1 customer 1 |Item 2 customer 1 |Item 3 customer 2 |Item 1 customer 2 |Item 4 customer 3 |Item 2 customer 4 |Item 5 customer 5 |Item 6

我需要将表格转换为

CustomerName|Item 1|Item 2|Item 3|Item 4|Item 5|Item 6| customer 1 | X | X | X | | | | customer 2 | X | | | X | | | customer 3 | | X | | X | | | customer 4 | | | | | X | | customer 5 | | | | | | X |

我试过PIVOT,在 SAP HANA 中它不起作用。

任何建议将不胜感激。

【问题讨论】:

  • 是否只有6 项目或可能有更多。在这种情况下,您要在表中添加那么多列吗?
  • 可能有数十万个项目 :) 这只是一个例子。
  • 如果您可以拥有数十万个项目,那么您不会希望在 MySQL 中这样做。你真的想要一个有这么多的数据透视表吗?
  • @Tom 不是真的!我不知道我将采用哪种方法进行改造。我检查了你分享的页面。

标签: sql sap hana


【解决方案1】:

SAP HANA 不提供可以在其他 DBMS 中找到的非标准 SQL 运算符“PIVOT”。 对于永久转换,例如在 ETL 期间,您可以使用流程图函数 PIVOT/UNPIVOT 自动执行转换。

对于动态转换,没有内置功能,您必须自己编写代码。

【讨论】:

    【解决方案2】:

    好的,试试这个:

    SELECT CustomerName,
       MAX(CASE WHEN ROWN=1 THEN "Items" ELSE NULL END) AS Item1,
       MAX(CASE WHEN ROWN=2 THEN "Items" ELSE NULL END) AS Item2,
       MAX(CASE WHEN ROWN=3 THEN "Items" ELSE NULL END) AS Item3,
       MAX(CASE WHEN ROWN=4 THEN "Items" ELSE NULL END) AS Item4,
       MAX(CASE WHEN ROWN=5 THEN "Items" ELSE NULL END) AS Item5,
       MAX(CASE WHEN ROWN=6 THEN "Items" ELSE NULL END) AS Item6,
    FROM 
      (SELECT CustomerName, Items, 
              row_number() over (PARTITION BY CustomerName) AS ROWN
    FROM TABLE_NAME ORDER BY CustomerName)
                    GROUP BY CustomerName;
    

    其中 TABLE_NAME 是您的源表的名称。

    【讨论】:

    • 它没有帮助。对不起!
    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2013-02-15
    • 2019-07-03
    • 1970-01-01
    • 2023-03-15
    • 2019-09-15
    相关资源
    最近更新 更多