Sql PIVOT语句的变通方法

Sql PIVOT语句的变通方法,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有这个问题,需要2分钟才能解决,我需要找到一个解决办法,我知道UNPIVOT有一个更好的解决方案,使用交叉应用,PIVOT有类似的解决方案吗 SELECT [RowId], [invoice date], [GL], [Entité], [001], [Loc], [Centre Cout], [Compte_1], [Interco_1], [Futur_1], [Department], [Division], [Compagnie], [Localisation], [Centre/C

我有这个问题,需要2分钟才能解决,我需要找到一个解决办法,我知道UNPIVOT有一个更好的解决方案,使用交叉应用,PIVOT有类似的解决方案吗

SELECT [RowId],  [invoice date], [GL], [Entité], [001], [Loc], [Centre Cout], [Compte_1], [Interco_1], [Futur_1], [Department], [Division], [Compagnie], [Localisation], [Centre/Cout], [Compte], [Interco], [Futur], [Account], [Mobile], [Last Name], [First Name], [license fee], [GST], [HST], [PST], [Foreign Tax], [Sales Tax License], [Net Total], [Total], [ServiceType], [Oracle Cost Center], [CTRL], [EXPENSE], [Province]
        FROM 
                (SELECT fd.[RowId], fc.[ColumnName], fd.[Value]
                    FROM dbo.FileData fd
                INNER JOIN dbo.[FileColumn] fc  
                    ON fc.[FileColumnId] = fd.[FileColumnId]               
                WHERE FileId = 1
                    AND TenantId = 1) x
        PIVOT
        (
        MAX(Value)
        FOR [ColumnName] IN ( [invoice date], [GL], [Entité], [001], [Loc], [Centre Cout], [Compte_1], [Interco_1], [Futur_1], [Department], [Division], [Compagnie], [Localisation], [Centre/Cout], [Compte], [Interco], [Futur], [Account], [Mobile], [Last Name], [First Name], [license fee], [GST], [HST], [PST], [Foreign Tax], [Sales Tax License], [Net Total], [Total], [ServiceType], [Oracle Cost Center], [CTRL], [EXPENSE], [Province])
        ) AS p

数据透视很好,但条件聚合也很好。此外,不需要数据类型限制或转换

SELECT [RowId]
      ,[invoice date] = max(case when [FileColumnId] = ??? then Value end)
      ,[GL]           = max(case when [FileColumnId] = ??? then Value end)
      ,... more fields
 FROM  dbo.FileData fd
 WHERE FileId = 1
  AND TenantId = 1
 Group By [RowId]
编辑


您可以重新添加联接以使其更具可读性。

这里是一个很好的起点。