没有聚集功能的PIVOT

时间:2019-06-01 02:22:03

标签: sql tsql

我只有一张桌子,我想将其转到新桌子上。我使用数据透视实现,但聚合功能将过滤数据。如何在不使用汇总功能的情况下旋转数据表,或者您可以为我提供有关此问题的建议。

原始表

ID    Name    Value    Date
1     A       5.00     06/01/2019 13:00
2     A       13.15    06/02/2019 15:32
3     B       3.20     06/02/2019 15.32
4     B       33.11    05/11/2019 13:00
5     B       32.00    05/11/2019 13:00

转换到新表

ID    A     B     Date
1     5.00  NULL  06/01/2019 13:00
2     13.15 3.20  06/02/2019 15:32
3     NULL  33.11 05/11/2019 13:00
4     Null  32.00 05/11/2019 13:00

注意:ID是两个表上的标识。

我的数据中心代码,它只保留最大值。

PIVOT(
    MAX(Value) 
    FOR Name IN (A,B)) AS S
ORDER BY Date DESC

1 个答案:

答案 0 :(得分:2)

标准数据透视查询应在此处运行:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Date, Name ORDER BY ID) rn
    FROM yourTable
)

SELECT
    Date,
    MAX(CASE WHEN Name = 'A' THEN [Value] END) AS A,
    MAX(CASE WHEN Name = 'B' THEN [Value] END) AS B
FROM cte
GROUP BY
    Date, rn;

Demo