Ich versuche eine Pivot-Tabelle zu erstellen, die nur Strings enthält.Wie NULL-Werte in Pivot-Tabelle ersetzen?
Dies ist eine einfache Version meiner Tabelle:
CREATE TABLE SecurityGroup (GroupName VARCHAR(20), SecLevel VARCHAR(20), Power VARCHAR(20))
INSERT INTO SecurityGroup
SELECT 'GroupA','Level1','read'
UNION
SELECT 'GroupA','Level2','write'
UNION
SELECT 'GroupA','Level3','read'
UNION
SELECT 'GroupA','Level4','read'
UNION
SELECT 'GroupA','Level4','write'
Ich möchte die Pivot-Funktion verwenden, um die folgenden Resultset
GroupName Level1 Level2 Level3 Level4
GroupA read write read read
GroupA read write read write
Das Problem ich habe
Erwartung zu erhalten ist, dass die Werte für Level1 - Level3 nur einmal existieren, während Level4 2 verschiedene Werte hat. So bin ich immer erhalte diese Resultset:
Reality
GroupName Level1 Level2 Level3 Level4
GroupA read write read read
GroupA NULL NULL NULL write
Ich verwende diesen Code
SELECT
[GroupName],
[Level1],
[Level2],
[Level3],
[Level4]
FROM
(SELECT
[GroupName],
[SecLevel],
[Power],
ROW_NUMBER() OVER(PARTITION BY [GroupName], [SecLevel] ORDER BY [Power]) AS rn
FROM [SecurityGroup]) AS SourceTable
PIVOT
(MAX([Power])
FOR [SecLevel]
IN ([Level1], [Level2], [Level3], [Level4])
) AS PivotTable
Irgendwelche Ideen, wie man das Problem lösen? Ich kann keine weiteren Werte für Level1 - Level3 in der Quelltabelle hinzufügen.
Ich habe bereits versucht, RANK() anstelle von ROW_NUMBER() zu verwenden, aber es hat nicht funktioniert.
Danke für Ihre Hilfe.
Ein Schmerz zu schreiben, aber meine Idee ist, eine CTE oder temporäre Tabelle zu verwenden, in der Sie Werte für Level1 - Level3 hinzufügen, und wählen Sie dann aus dem CTE anstelle der Tabelle. Die tatsächliche Tabelle muss nicht geändert werden. Es sollte etwas eleganteres geben, aber ich komme nicht dazu. –
Wenn Sie das Eingabeergebnis betrachten, gibt Ihr PIVOT das korrekte Ergebnis zurück! Sie haben im Wesentlichen zwei verschiedene Gruppen, obwohl sie beide GroupA heißen. Einer hat einen Wert für alle 4 Ebenen und einer hat nur für Stufe 4. –
BTW, warum generieren Sie eine RowNumber und verwenden sie nirgendwo? –