SQL Server 透视一列并保留其他列

Sta*_*cks 4 python sql sql-server pivot pyspark

我正在尝试在 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
Run Code Online (Sandbox Code Playgroud)

期望的结果

ID         |  Date      | ABC | XYZ  | MNO 
-------------------------------------------------
P1         | 2016-12-31 | 900  |     | 
P2         | 2016-11-30 |      | 800 |     
P3         | 2016-10-31 |      |     | 700
Run Code Online (Sandbox Code Playgroud)

我已经尝试在 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;
Run Code Online (Sandbox Code Playgroud)

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

df.groupBy("ID","Date").pivot("Description").sum("Value")
Run Code Online (Sandbox Code Playgroud)

GMB*_*GMB 6

使用条件聚合:

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
Run Code Online (Sandbox Code Playgroud)