SQL 服务器:展平 PIVOT 结果

SQL Server: flatten PIVOT result

我编写的 PIVOT 函数产生了以下结果集:

Date       | User   | Hour | Result | FIELD1 | FIELD2 | FIELD3 | FIELD4 | FIELD5 | FIELD6 
-----------------------------------------------------------------------------------------    
2015-06-23 | Pippo  |   1  |   OK   |  NULL  |  NULL  |   10   |  NULL  |  NULL  | NULL
2015-06-23 | Pippo  |   1  |   OK   |  NULL  |  5     |   NULL |  NULL  |  NULL  | NULL
2015-06-23 | Pippo  |   1  |   OK   |  1     |  NULL  |   NULL |  NULL  |  NULL  | NULL

有没有一种方法,对于具有相同日期、用户、小时、结果值的行,将所有 FIELD 列聚合为一个,如下所示:

2015-06-23 | Pippo  |   1  |   OK   |  1     |  5     |   10   |  NULL  |  NULL  | NULL

我已尝试对(日期、用户、小时、结果)进行 GROUP BY,但 PIVOT 运算符继续分解,这同样适用于任何 FIELD# 列上的 MAX。

有什么想法吗?

您可以将 PIVOT 用作子选择并在主查询中合并您的结果

SELECT      Date, User, Hour, Result,
            SUM(ISNULL(Field1,0) Field1, 
            SUM(ISNULL(Field2,0) Field2, 
            ...
FROM        (   SELECT  ...
                FROM    ...
                PIVOT   ...
            )   Subquery
GROUP BY    Date, User, Hour, Result

您必须在子查询中只保留三列。 PIVOT函数为具有唯一所有列的行创建行,不仅用于数据透视表