Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como PIVOT em até 49 campos?


Sua primeira consulta é a mais próxima, exceto que você não incluiu todos os case em função agregada. Também parece que você não precisa de algumas colunas em group by cláusula:
select
    [Encounter Number], 
    Proc1 = max(CASE When [Encounter Proc Sequence] = '1' Then [Procedure Code (Enctr)] END),
    SvcDate1 = max(Case When [Encounter Proc Sequence] = '1' Then [Date of Service] END),
    Surgeon1 = max(CASE When [Encounter Proc Sequence] = '1' Then [Surgeon] END),
    Proc2 = max(CASE When [Encounter Proc Sequence] = '2' Then [Procedure Code (Enctr)] END),
    SvcDate2 = max(Case When [Encounter Proc Sequence] = '2' Then [Date of Service] END),
    Surgeon2 = max(CASE When [Encounter Proc Sequence] = '2' Then [Surgeon] END),
    Proc3 = max(CASE When [Encounter Proc Sequence] = '3' Then [Procedure Code (Enctr)] END),
    SvcDate3 = max(Case When [Encounter Proc Sequence] = '3' Then [Date of Service] END),
    Surgeon3 = max(CASE When [Encounter Proc Sequence] = '3' Then [Surgeon] END)
    --- etc.
from EncounterProc
where [Date of Service] between '20090101' and '20091231'
    and [Procedure Code (ENCTR)] is not null
group by [Encounter Number], [Encounter Proc Sequence]