2017-04-04 14 views
1

解決方法を見つける必要がありますが、解決策が必要です.UNPIVOTにCROSS APPLYを使用するとより良い解決策があります。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] 

EDIT

はないだろう。