2016-06-14 4 views
0

Ich bin auf SQL 2k12 und stolpern mit dem Befehl PIVOT. Meine Daten wie dieses ich die Ausgabe benötigenWarum gibt PIVOT mehrere Zeilen zurück?

source data

sieht aus wie dieses

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

Die Abfrage ich verwende ist das

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 

Der Ausgang ich das sehe, ist

current output does not match requirements

Was mache ich falsch?

Antwort

0

versuchen, diese

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

süß! das funktioniert ... Warum erstellt eine andere Spalte mehrere Zeilen? – SQLSeeker

+0

ich denke, es ist wegen der where-Klausel und auch die offizielle Syntax schlägt vor, die Unterabfrage – Kostya

+0

zu verwenden Wenn Sie ein 'Select *' mit Ihrer ursprünglichen Abfrage, werden Sie sehen, dass es ein PIVOT für alle Spalten auf der tut Tabelle. – mo2

0

als Alternative zu verschwenken, könnten Sie SUM(CASE) in einigen Fällen versuchen wollen, werden Sie eine bessere Leistung erhalten.

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 
Verwandte Themen