首页 > 解决方案 > 不带聚合功能的 PIVOT

问题描述

我有一个表,我想将其转为新表。我使用 pivot 来实现,但聚合函数会过滤数据。如何在没有聚合函数的情况下透视表,或者你可以给我这个问题的建议。

原始表

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

标签: sqltsql

解决方案


一个标准的数据透视查询应该在这里工作:

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;

演示


推荐阅读