Données de tableau croisé dynamic à l'aide d'une requête de sélection SQL

J'ai besoin de faire pivoter certaines données lors d'une requête de sélection. J'utilise SQL Server 2014. Voici le format des données d'origine.

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

Et je veux qu'il affiche comme …

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

Parfois, un étudiant aura les deux types de document. Parfois, ils n'en auront qu'un. Je ne sais pas si le type de document "manquant" apparaîtrait comme NULL ou simplement vide dans ce champ.

de cette façon pourrait vous faire économiser du 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 

Voici.

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

C'est un pivot statique qui signifie que vous devez entrer manuellement les colonnes que vous voulez faire pivoter. Si, par exemple, vous avez aussi un DocC, faites-le …

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