2015-08-14 135 views
0

我一直在閱讀這個板上的各種示例,但一直未能掀起動態數據透視查詢來適應我的代碼。任何幫助,將不勝感激!SQL Server - 動態數據透視查詢

我有兩個表

AuxDef

Fieldnumber Fieldlabel 
------------------------ 
1   Buyer 
2   Size Range 
3   Source 
4   Country 
5   Vendor 
ect...  ect... 

AuxFields

PageID FieldNumber TextValue 
----------------------------------- 
1  1    Sam 
1  2    S-L 
1  3    Domestic 
1  4    Canada 
2  1    Kyla 
2  3    Import 
2  5    VendorName 
2  6    Off-Shore 
2  7    Fit 1 
2  8    Yes 
4  1    Sara 
4  3    Import 
4  4    China 
ect.. ect..   ect.. 

我希望做的是創建一個由fieldnumber加入兩個表並使用fieldlabels動態透視作爲pageid之後的列標題。它看起來與此類似。

PageID Buyer  Size Range Source  Country Vendor  Type  Status Exclusive ect.. 
------------------------------------------------------------------------------------------------ 
1  Sam  S-L   Domestic Canada 
2  Kyla     Import    VendorName Off-Shore Fit 1 Yes 
4  Sara     Import  China 

我試過這個網站上的例子,但是當我用自己的字段或實際的列代替字段時,我仍然遇到錯誤。

+5

你能後的你試過的代碼和它的錯誤是什麼eturned? –

回答

0

你需要創建一個動態的樞軸(信貸@bluefeet's answer here)是這樣的:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.FieldLabel) 
      FROM auxdef c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT PageID, ' + @cols + ' from 
      (
      select 
       PageId, 
       FieldLabel, 
       TextValue 
      from AuxFields af 
      inner join auxdef ad on af.FieldNumber = ad.FieldNumber 
      ) x 
      pivot 
      (
       max(TextValue) 
       for FieldLabel in (' + @cols + ') 
      ) p ' 


execute(@query); 

SQL Fiddle Demo

0

這裏的另一種方式

sql fiddle

declare @sql nvarchar(max) 
select @sql = 'select af.pageId' 

select @sql = @sql + ', max(case when ad.fieldLabel = ''' + ad.fieldLabel + ''' then af.textValue end) as [' + ad.fieldLabel + ']' + char(13) 
from auxDef ad 

select @sql = @sql + 'from auxDef ad' + char(13) 
+ 'inner join auxFields af on af.fieldNumber = ad.fieldNumber' + char(13) 
+ 'group by af.pageId' 

exec(@sql)