2016-09-23 1 views
1

Ich muss einige Daten bei einer Select-Abfrage drehen. Ich benutze SQL Server 2014. Hier ist das Format der Originaldaten. haben beide DokumentartenPivot-Daten mit einer SQL Select-Abfrage

StudentID | DocumentType | PersonID 
    ---------- ------------- -------- 
    00001   DocA   2222 
    00001   DocB   2222 
    00002   DocB   2222 
    00002   DocA   3333 
    00003   DocA   4444 

Und ich will es wie ...

StudentID | DocumentTypeAPersonID | DocumentTypeBPersonID 
    --------- --------------------- ----------------------- 
    00001    2222      2222 
    00002    3333      2222 
    00003    4444      NULL 

Manchmal ist ein Schüler angezeigt werden soll. Manchmal haben sie nur einen. Nicht sicher, ob der "fehlende" Dokumenttyp in diesem Feld als NULL oder nur als leer angezeigt wird.

+0

Dank könnte speichern. Es ist SQL Server 2014. Ich verwende Microsoft SQL Server Management Studio, um meine Suchabfragen auszuführen. – bosstone75

+0

Sind die einzigen Möglichkeiten 'DocA' und' DocB'? – CodyMR

+0

Entschuldigung ... ja. Nur Möglichkeiten sind DocA und DocB – bosstone75

Antwort

2

diese Weise können Sie einige Code

SELECT StudentID, 
     DocumentTypeAPersonID = MAX(CASE WHEN DocumentType ='DocA' THEN PersonID END), 
     DocumentTypeBPersonID = MAX(CASE WHEN DocumentType ='DocB' THEN PersonID END) 
FROM MyTable 
GROUP BY StudentID 
+0

Das hat super funktioniert! Vielen Dank! – bosstone75

0

Hier gehen Sie.

SELECT StudentID, DocA, DocB FROM 
(
    SELECT StudentID, DocumentType, PersonID 
    FROM myTable 
) t 
pivot 
(
    MAX(PersonID) 
    FOR DocumentType IN (DocA, DocB) 
) p 

Dies ist ein statischer Pivot, dh Sie müssen die Spalten, die Sie drehen möchten, manuell eingeben. Wenn zum Beispiel, haben Sie auch ein DocC dann dies nur tun ...

SELECT StudentID, DocA, DocB, DocC FROM 
(
    SELECT StudentID, DocumentType, PersonID 
    FROM myTable 
) t 
pivot 
(
    MAX(PersonID) 
    FOR DocumentType IN (DocA, DocB, DocC) 
) p