Nach einer Menge Arbeit konnte ich eine dynamische Pivot-Abfrage mit den gewünschten Ergebnissen erstellen.Dynamische Pivot-Abfrage zur Ansicht/gespeicherten Prozedur?
Jetzt muss ich in der Lage sein, Parameter zu senden und meine Abfrage zu filtern. Normalerweise erstelle ich einfach eine Ansicht, in der ich eine SELECT * FROM
verwenden kann und in WHERE
Klausel verwende meine Parameter zu filtern. Ich habe gelesen, dass es nicht möglich ist, eine Sicht aus einer dynamischen Pivot-Abfrage zu erstellen, also brauche ich Hilfe, um dieses Problem zu lösen.
Das ist mein SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT ',' + QUOTENAME(p.tag)
FROM (((ZUS_Monatsreport_Kopf k
LEFT JOIN ZUS_Monatsreport_Pos p ON k.Id = p.Id_Kopf)
LEFT JOIN ADR_Adressen a ON k.Adresse = a.AdressNrADR)
LEFT JOIN ADR_GruppenLink gl ON a.AdressNrADR = gl.AdressNrADR)
LEFT JOIN ADR_Gruppen g ON gl.GruppeADR = g.GruppeADR
GROUP BY p.Tag
ORDER BY p.tag
FOR XML PATH (''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT AdressNrADR,Monat,Id_kopf,Name,Artikel, '+ @cols + ' FROM
(
SELECT a.AdressNrADR,k.monat,p.Id_kopf,a.name + '' ''+ a.vorname as Name,p.Artikel, p.Tag,CASE WHEN CAST(p.wert AS VARCHAR(10)) = '''' THEN CAST(p.Menge AS VARCHAR(10)) ELSE CAST(p.Wert AS VARCHAR(10)) END AS Menge
FROM (((ZUS_Monatsreport_Kopf k
LEFT JOIN ZUS_Monatsreport_Pos p ON k.Id = p.Id_Kopf)
LEFT JOIN ADR_Adressen a ON k.Adresse = a.AdressNrADR)
LEFT JOIN ADR_GruppenLink gl ON a.AdressNrADR = gl.AdressNrADR)
LEFT JOIN ADR_Gruppen g ON gl.GruppeADR = g.GruppeADR
) x
pivot
(max(menge)
for tag in (' [email protected] +')
) p '
execute(@query)
Dies ist, wie mein Ergebnis sieht so aus:
Jetzt muss ich einen wählen der Lage sein, um rund um die diese SQL und sagen für Beispiel
SELECT *
FROM mypivotquery
WHERE AdressNrADR = 10640 (<-parameter) and Monat = 2 (<-parameter)
Ich hoffe, ich könnte erklären, was ich suche für und dass ihr können mir helfen :)
Dank