SQL Server:展平PIVOT结果

时间:2016-07-07 09:11:13

标签: sql sql-server pivot

我写的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也是如此。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

您必须在子查询中只留下三列。 PIVOT函数为具有唯一ALL列的行创建行,不仅用于pivot