2017-04-04 20 views
1

我有这个查询,需要2分钟解决,我需要找到一个解决方法,我知道UNPIVOT有一个更好的解决方案使用CROSS APPLY,有什么类似的PIVOT?解决方案为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 
+1

这是一个很好的开始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

回答

1

枢轴是伟大的,但也有条件聚合。此外,就没有数据类型conficts或转换必要

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] 

编辑

你可以加回加盟,使其更具可读性。