为什么PIVOT会返回多行?

时间:2016-06-14 18:40:26

标签: sql sql-server pivot

我在SQL 2k12上并且遇到了PIVOT命令。 我的数据看起来像这样

source data

我需要像这样的输出

DimQuestion_y_attribute  [Q42] [Q13] [Q23]
Q14                      0.574 0.508 0.403
Q24                      0.117 0.19  0.111

我正在使用的查询是

    select DimQuestionNum_y_Attribute, [Q42],[Q13],[Q23]
from  [dbo].[Pearson_Coefficient_Values]
PIVOT 
(
 SUM(coeff_value) For DimQuestionNum_x_Rating IN ([Q42],[Q13],[Q23])
 ) p
 where surveyid = 1109245

我看到的输出是

current output does not match requirements

我做错了什么?

2 个答案:

答案 0 :(得分:1)

作为PIVOT的替代品,你可能想尝试SUM(CASE),在某些情况下,你会获得更好的表现。

SELECT  DimQuestionNum_y_Attribute,
        SUM(CASE WHEN DimQuestionNum_x_Rating = 'Q42' THEN coeff_value END) [Q42],
        SUM(CASE WHEN DimQuestionNum_x_Rating = 'Q13' THEN coeff_value END) [Q13],
        SUM(CASE WHEN DimQuestionNum_x_Rating = 'Q23' THEN coeff_value END) [Q23]
FROM    [dbo].[Pearson_Coefficient_Values] 
WHERE   surveyid = 1109245
GROUP BY DimQuestionNum_y_Attribute

答案 1 :(得分:0)

试试这个

select DimQuestionNum_y_Attribute, [Q42],[Q13],[Q23]
from (select DimQuestionNum_y_Attribute,coeff_value, DimQuestionNum_x_Rating from   [dbo].[Pearson_Coefficient_Values]  where surveyid = 1109245) tb 
PIVOT 
(
 SUM(coeff_value) For DimQuestionNum_x_Rating IN ([Q42],[Q13],[Q23])
 ) p