Ich habe ein Problem beim Konvertieren von Zeilen in Spalten eines SQL-Ergebnisses.SQL Pivot ohne Aggregation
Meine Struktur ist wie folgt:
GUID | Eigenschaftsname | PropertyValue
abcd | DistinguishedName | cn = abcd ...
abcd | CN | cn = GROUP_
abcd | Bedienung | ADD
1231 | DistinguishedName | cn = 123dd
1231 | Cn | cn = ASDGRUOP
1231 | Bedienung | DEL
Es kann n PropertyNames geben, die ich vorher nicht kenne, sie sind dynamisch - ich kann sie durch ein SQL bekommen, das ist nicht das Problem.
Ich möchte eine Struktur wie diese haben: GUID | DistinguishedName | CN | Bedienung
abcd | cn = abcd ... | cn = GROUP_ | ADD
1231 | cn = 123dd | cn = ADSGROUP | DEL
und so weiter.
Die Column-Header i dieses SQL erhalten:
select @cols = STUFF ((SELECT DISTINCT '],[' + x.ParameterName from ... and parametername in ('PropertyValue','DistinguishedName', 'Operation')
FOR XML PATH ('')),1,2,'') + ']'
ich dies mit PIVOT-Funktion tun können, aber weil ich Aggregation nicht haben, kann ich nicht das richtige Ergebnis erhalten:
set @query = N'SELECT '+ @cols + ' FROM (
SELECT x.parametervalue, x.parametername
from ... and parametername in (''PropertyValue'',''DistinguishedName'', ''Operation'')
) a
PIVOT (max(a.parametervalue) FOR ParameterName in (' + @cols + ')) as pv;'
exec sp_executesql @query;
Ich erhalte folgendes Ergebnis:
GUID | DistinguishedName | CN | Bedienung | ... andere Immobilien
abcd | cn = abcd ... | cn = GROUP_ | ADD | ...
Nur 1 Ergebnis - nicht mehr. Aber es gibt wie 700 Ergebnisse von dieser Abfrage, wegen der Funktion MAX() bekomme ich nur eine. Wie kann ich ein Pivot ohne Aggregation erhalten, um alle Ergebnisse zu erhalten?
Vielen Dank im Voraus!Hier
Es ist schwierig, ohne ein * vollständiges * Beispiel zu helfen. Du bist nah dran. Sie müssen nur sicherstellen, dass das * resultset *, das Sie drehen, die 'GUID'-Spalte sowie jede der' Parameter'-Spalten enthält, da eine 'PIVOT'-Operation immer eine Zeile * pro * bestimmter Menge von erzeugt Werte für die Spalten in der Ergebnismenge, die * nicht * Teil des 'PIVOT' sind. –