【问题标题】:SQL Server Pivot One Column and Keep Other ColumnsSQL Server 旋转一列并保留其他列
【发布时间】:2020-09-02 19:55:06
【问题描述】:

我正在尝试在 SQL Server 中旋转一个表(52M+ 观察),但是我没有得到我需要的结果。有 15 个描述,每个描述都有一个我需要调整的值。

原始数据框:

ID         |  Date      | Description| Value 
-------------------------------------------------
P1         | 2016-12-31 |       ABC  |         900
P2         | 2016-11-30 |       XYZ  |         800
P3         | 2016-10-31 |       MNO  |         700

期望的结果

ID         |  Date      | ABC | XYZ  | MNO 
-------------------------------------------------
P1         | 2016-12-31 | 900  |     | 
P2         | 2016-11-30 |      | 800 |     
P3         | 2016-10-31 |      |     | 700

我尝试在 PySpark 和 SQL 中对此进行旋转,但没有得到有效的结果。

SQL 尝试:

SELECT [Date]
      ,[ID]
      ,[Description]
      ,[Value]
  FROM [DB].[TABLE]
  WHERE ( ([Description] IN ('ABC','XYZ', 'MNO'))
  PIVOT(
    COUNT([Value]) 
    FOR Description IN (
        [ABC], 
        [XYZ], 
        [MNO])
) AS pivot_table;

我在 Pyspark 中尝试过,但它也不起作用:

df.groupBy("ID","Date").pivot("Description").sum("Value")

【问题讨论】:

    标签: python sql sql-server pyspark pivot


    【解决方案1】:

    使用条件聚合:

    select
        id,
        date,
        max(case when description = 'ABC' then value end) as abc,
        max(case when description = 'DEF' then value end) as def,
        max(case when description = 'MNO' then value end) as mno
    from mytable
    group by id, date
    

    【讨论】:

      【解决方案2】:

      pivot 运算符紧跟在 FROM 子句中的表之后。要放置 WHERE 子句,您需要将数据透视源表放在子查询或公用表表达式中。

      此外,您不能在外部选择中输出 Description 和 Value 列,因为它们现在按 Pivot 分组。

      试试这个方法:

      SELECT [Date],
              [ID], 
              [ABC], 
              [XYZ], 
              [MNO]
      FROM
      (
          SELECT [Date]
                ,[ID]
                ,[Description]
                ,[Value]
            FROM [DB].[TABLE]
            WHERE ([Description] IN ('ABC','XYZ', 'MNO'))
      ) AS SourceTable 
       PIVOT(
          COUNT([Value]) 
          FOR Description IN (
              [ABC], 
              [XYZ], 
              [MNO])
      ) AS PivotTable;
      

      【讨论】:

        猜你喜欢
        • 2022-10-13
        • 2022-11-23
        • 2023-04-04
        • 2017-04-07
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        相关资源
        最近更新 更多