[SQL-Abfrage] Spalten gegebenfalls hinzufügen
-
Union fügt an ein ROWSET ein weiteres ROWSET der 2ten SELECT (UNION SELECT) an.
Union geht davon aus das die Annzahl der Spalten gleich sind.Wo liegt das Problem mit den Daten dann eine Logic aufzubauen. Dh. die Daten dann so auszugeben wie du sie willst.
-
Soo
Der folgende Link beschrieb genau mein Problem:
http://www.itrain.de/knowhow/sql/tsql/pivot/pivot.aspHabe es an meiner Tabell angewandt und bekomme nun dieses Erbenis:
Name Vorname TV PC -------------------------------------- Lulu Haha Pro7 Null Lulu Haha Null C++
Das ist eigentlich genau das was ich wollte. Nun muss ich aber die 2 Zeilen überlagern. Wie krieg ich das hin. Gruppieren kann ich sie ja nicht, weil ich keine Aggregatfunktionen drin habe.
-
Poste doch einfach mal den SELECT dazu. Du weißt wie er aussieht, wir nicht, also können wir Dir auch nicht sagenl, was Du ändern mußt...
-
Du wolltest es ja so:
Das oben war ja nur nen Beispiel so siehts in Wirklickkeit aus:
SELECT Studie, Studientag, Proband, Datum, Uhrzeit, (CASE [Parameter] WHEN 'Gewicht' THEN Wert END) AS Gewicht, (CASE [Parameter] WHEN 'Initials' THEN Wert END) AS Initials FROM (SELECT dbo.Study.Study_Title AS Studie, dbo.[Study Day].[Study Day Name] AS Studientag, dbo.[Test Subject].[Test Subject_Study Subject Code] AS Proband, dbo.[Study Day].[Study Day Date] AS Datum, dbo.[Study Day].[Study Day Date] AS Uhrzeit, dbo.Parameter.Parameter_Name AS Parameter, dbo.Study_Data.Study_Data_Value AS Wert FROM dbo.Activity INNER JOIN dbo.[Rel_Activity_Study Data] ON dbo.Activity.Activity_ID = dbo.[Rel_Activity_Study Data].[Related Activity_ID] INNER JOIN dbo.[Study Day] ON dbo.Activity.[Related Study Day_ID] = dbo.[Study Day].[Study Day ID] INNER JOIN dbo.Study_Data ON dbo.[Rel_Activity_Study Data].[Related Study Data_ID] = dbo.Study_Data.Study_Data_ID INNER JOIN dbo.Parameter ON dbo.Study_Data.Related_Parameter_ID = dbo.Parameter.Parameter_ID INNER JOIN dbo.[Test Subject] ON dbo.[Study Day].[Related Test Subject_ID] = dbo.[Test Subject].[Test Subject_ID] INNER JOIN dbo.Study ON dbo.[Test Subject].[Related Study_ID] = dbo.Study.Study_ID WHERE (dbo.Study.Study_Title = N'blk3') AND (dbo.Activity.Activity_Name = N'Test')) AS derivedtbl_1
-
Nochmal ohne die ganze innere Verschachtlung:
SELECT Studie, Studientag, Proband, Datum, Uhrzeit, (CASE [Parameter] WHEN 'Gewicht' THEN Wert END) AS Gewicht, (CASE [Parameter] WHEN 'Initials' THEN Wert END) AS Initials FROM derivedtbl_1
Bezug zu meinem Beispiel:
-------------------------
Parameter -> Sonstiges
Gewicht -> TV
Initials -> PC
-
Hast Du schon versucht eine GROUP BY-Klausel zu verwenden?
-
Ja wenn ich ein Group by Datum anhänge dann kommt ne Fehlermeldung:
"Die Studie-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in einer Group by-Klausel ist."
Dann tue ich sie halt mit in die Klausel und dann will er das Studientag drin steht.
Das geht dann so weiter...Wenn ich dann alle drin habe kommt dieser Fehler:
"Die Datentypen 'text', 'ntext' und 'image' können nur mithilfe des Operators IS NULL oder LIKE verlichen oder sortiert werden"
-
Ich kann das selbe Ergnis jetzt auch mit UNION erziehlen, also ohne die CASE Geschichte.
Trotzdem muss ich immer noch diese Zeilen zusammen bekommen
-
Im "Group by" müssen ALLE Spalten, die Du abfragst und kein Aggregat sind, aufgezählt werden.
Bau bei den Case-Anweisungen am Ende ein AS 'Spaltenname' als Namensgeber ein und dann funzt die "Überlagerung" der Datensätze auch.
-
Danke für die Antwort, ist aber nicht mehr nötig
Muss das ganze jetzt ehe anders machen und mein Webdienst verarbeitet die Daten dann für mich...