PIVOT-Verständnisfrage (SQL 2005)

14/04/2010 - 09:29 von Gerald Aichholzer | Report spam
Hallo NG,

ich verwende folgende SQL-Abfrage, um eine Pivottabelle
zu erzeugen:

select
SurveyId, ResponseId, [5], [6], [7], [8], [9]
from (
select SurveyId, ResponseId, QuestionId, ValueId
from SurveyQuestionResponse sqr
where ApplicationId = 202
and QuestionId in (5, 6, 7, 8, 9)
) sqr

pivot
(
sum(ValueId)
for [QuestionId] in ([5], [6], [7], [8], [9])
) as p


Das Ergebnis sieht dann wie folgt aus (leer = NULL):

SId RId 5 6 7 8 9

2002 2 3
2002 3
2002 4 3 3
2002 4 1
...


Ich verstehe nicht, warum die letzten beiden Zeilen
nicht zu einer Zeile zusammengefasst werden? Dieser
Fall kommt im Ergebnis sehr oft vor (teilweise mit
mehreren Zeilen).

Möglicherweise liegt es an der Tabellenstruktur von
SurveyQuestionResponse? Diese Tabelle hat einen Primàr-
schlüssel bestehend aus ApplicationId, SurveyId,
ResponseId, QuestionId und ScaleId, wobei für die abge-
fragte ApplicationId es jeweils nur eine Kombination
von QuestionId und ScaleId gibt.

vielen Dank und schöne Grüße,
Gerald
 

Lesen sie die antworten

#1 Peter Doering
14/04/2010 - 12:47 | Warnen spam
Hallo,

Gerald Aichholzer wrote:

ich verwende folgende SQL-Abfrage, um eine Pivottabelle
zu erzeugen:

select
SurveyId, ResponseId, [5], [6], [7], [8], [9]
from (
select SurveyId, ResponseId, QuestionId, ValueId
from SurveyQuestionResponse sqr
where ApplicationId = 202
and QuestionId in (5, 6, 7, 8, 9)
) sqr

pivot
(
sum(ValueId)
for [QuestionId] in ([5], [6], [7], [8], [9])
) as p

Das Ergebnis sieht dann wie folgt aus (leer = NULL):

SId RId 5 6 7 8 9

2002 2 3
2002 3
2002 4 3 3
2002 4 1
...

Ich verstehe nicht, warum die letzten beiden Zeilen
nicht zu einer Zeile zusammengefasst werden? Dieser
Fall kommt im Ergebnis sehr oft vor (teilweise mit
mehreren Zeilen).



Irgenwie scheint an deinem Beispiel was nicht ganz zu stimmen. Folgendes
Script ...


CREATE TABLE #SurveyQuestionResponse ( SurveyID INT, ResponseID INT,
QuestionID INT, ValueID INT, ApplicationID INT )

INSERT INTO #SurveyQuestionResponse ( SurveyID, ResponseID, QuestionID,
ValueID, ApplicationID ) VALUES ( 2002, 2, 7, 3, 202 )
INSERT INTO #SurveyQuestionResponse ( SurveyID, ResponseID, QuestionID,
ValueID, ApplicationID ) VALUES ( 2002, 3, 0, 0, 202 )
INSERT INTO #SurveyQuestionResponse ( SurveyID, ResponseID, QuestionID,
ValueID, ApplicationID ) VALUES ( 2002, 4, 6, 3, 202 )
INSERT INTO #SurveyQuestionResponse ( SurveyID, ResponseID, QuestionID,
ValueID, ApplicationID ) VALUES ( 2002, 4, 8, 3, 202 )
INSERT INTO #SurveyQuestionResponse ( SurveyID, ResponseID, QuestionID,
ValueID, ApplicationID ) VALUES ( 2002, 4, 9, 1, 202 )

SELECT
SurveyId, ResponseId, [5], [6], [7], [8], [9]
FROM (
SELECT SurveyId, ResponseId, QuestionId, ValueId
FROM #SurveyQuestionResponse sqr
WHERE ApplicationId = 202
AND QuestionId in (5, 6, 7, 8, 9)
) sqr

PIVOT
(
SUM(ValueId)
FOR [QuestionId] in ([5], [6], [7], [8], [9])
) AS p

DROP TABLE #SurveyQuestionResponse

ergibt bei mir:

SurveyID ResponseID 5 6 7 8 9
2002 2 NULL NULL 3 NULL NULL
2002 4 NULL 3 NULL 3 1

Gruss - Peter

Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com

Ähnliche fragen