2016-06-14 8 views
0

私はSQL 2k12を使用していますが、PIVOTコマンドを抱えています。 私のデータは、私は私が使用しています。このPIVOTが複数の行を返すのはなぜですか?

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

クエリのような出力を必要とし、この

source data

のように見える私が見出力はこの

あるこの

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

私は間違っていますか?

答えて

0

はPIVOTに代わるものとして、この

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

sweet!それは動作します...なぜ複数の行を作成する他の列を持っていますか? – SQLSeeker

+0

私はwhere句のために考えていますし、正式な構文ではサブクエリを使うことを示唆しています – Kostya

+0

元のクエリで 'select *'を実行すると、その行のすべての列に対してPIVOTを実行しています表。 – mo2

0

を試してみてください、あなたはより良いパフォーマンスが得られますいくつかのケースで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 
関連する問題