Konvertieren Zeile Daten-Spalte in SQL Server

Heute wurde ich gefragt von meiner Kollegin zum transformieren von Daten von einer vertikalen staging-Tabelle in eine horizontale Tabelle. Ich meine, verwandeln Zeilen auf der Spalte. Ich benutzte PIVOT und gelöst. Bekam aber in situation, wo ich bin immer ärger um Daten zu verschieben, wenn die Daten Feld wiederholt sich.

Hier ist der test-Daten, an denen ich arbeite:

CREATE TABLE STAGING 
(
    ENTITYID INT,
    PROPERTYNAME VARCHAR(25),
    PROPERTYVALUE VARCHAR(25)
)

INSERT INTO STAGING VALUES (1, 'NAME', 'DONNA')
INSERT INTO STAGING VALUES (1, 'SPOUSE', 'HENRY')
INSERT INTO STAGING VALUES (1, 'CHILD', 'JACK')
INSERT INTO STAGING VALUES (2, 'CHILD', 'KAYALA')

Ich verwendet PIVOT auf Zeile anzeigen Daten als Spalten:

SELECT * FROM 
(SELECT ENTITYID, PROPERTYNAME, PROPERTYVALUE FROM STAGING) AS T
PIVOT (MAX(PROPERTYVALUE) FOR PROPERTYNAME IN (NAME, SPOUSE, CHILD)) AS T2

Ausgabe:

ENTITYID    NAME    SPOUSE  CHILD
1           DONNA   HENRY   JACK
2           NULL    NULL    KAYALA

Aber er wollte die Ausgabe etwas wie:

ENTITYID    NAME    SPOUSE  CHILD   CHILD
1           DONNA   HENRY   JACK    KAYALA

Quintessenz ist, dass es kann mehr als ein CHILD-Attribut kommt in die staging-Tabelle. Und wir müssen dies berücksichtigen und verschieben Sie alle KINDER zu Spalten.

Ist das möglich?

Woher wissen Sie, dass Kayala gehört zu Donna und Henry? Oder ist das Beispiel falsch, dass Kayala hätte eine Entity-ID 1 auch?
Eigentlich ist es eine unterstützende Tabelle, entityid und parententityid Beziehung. Aber, ich denke, um dies zu vereinfachen, kann ich die gleiche Person id.

InformationsquelleAutor Sri Reddy | 2013-06-12

Schreibe einen Kommentar