2016-07-07 68 views
0

我写了一个旋转功能产生以下结果集:SQL服务器:扁平化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 

有没有一种方法,对于具有相同日期的行,用户,小时,结果值聚合所有的字段列到一个如下:

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

我已经试过GROUP BY(日期,用户,小时,结果),但PIVOT操作者保持对分列,在任何领域#列同样适用于MAX。

有什么想法?

+0

用'select'包装您的sql并进行聚合。 – Blank

回答

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 
+0

谢谢鲁本斯,但我需要将FIELD#列分开。 – SimoneF

+1

@SimoneF认为你的PIVOT结果是一张表;你怎么能整合你的数据?在我的代码片段中,我分开了“Field#”列。 –

+1

现在我明白了。谢谢。我做了或多或少的相同。我之前没有得到的是我需要聚合,因此我需要SUM或MAX Field#s! – SimoneF

1

你要离开只有三列在你的子查询巩固你的结果。 PIVOT函数为具有唯一ALL列的行生成行,不仅用于枢轴

+0

我想我很愚蠢,分心或两者兼而有之。谢谢。使用外部查询来限制我的PIVOT和GROUP BY结果的列做了个窍门。 – SimoneF