2016-11-22 121 views
0

我已經查看了各種SQL Server Pivot問題,但是我一直無法實現針對特定示例的各種解決方案。我想知道是否有人可以爲我提供正確的SQL語法,以便將我的行轉換爲列。SQL Server樞軸行進入列

我有如下表:

Tutor_Event_ID Tutor_FAN  Tutor_Individual_ID  Tutor_Title   Tutor_First_Name  Tutor_Last_Name  
59220   56004633  46415     Mr     Michael     Brian       
59220   67693357  128376     Mr     John     Newtons 

...我要轉的信息看起來像這樣:

Tutor_Event_ID First_Tutor_FAN   First_Tutor_Individual_ID  First_Tutor_Title   First_Tutor_First_Name  First_Tutor_Last_Name  Second_Tutor_FAN  Second_Tutor_Individual_ID  Second_Tutor_Title   Second_Tutor_First_Name  Second_Tutor_Last_Name  
59220   56004633    46415       Mr       Michael      Brian      67693357    128376       Mr       John      Newtons 

這裏的挑戰是,我需要轉超過1並且我不知道這些列可能存在的所有可能值,但實際上,每個事件在同一行中列出Tutor(或Tutors)信息時都有一行。 任何人都可以請建議一個SQL代碼來做到這一點?

提前許多感謝, 維羅尼卡

+0

感謝您對格式化的幫助,不確定爲什麼最初顯示爲這樣。現在看起來好多了。 – Veronica

回答

0

你可以參考下面的例子中,願望是有幫助的

 IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t 
     CREATE TABLE #t(Tutor_Event_ID INT ,Tutor_FAN VARCHAR(100),Tutor_Individual_ID INT,Tutor_Title VARCHAR(100),Tutor_First_Name VARCHAR(100),Tutor_Last_Name VARCHAR(100)) 
     INSERT INTO #t(Tutor_Event_ID,Tutor_FAN,Tutor_Individual_ID,Tutor_Title,Tutor_First_Name,Tutor_Last_Name) 
     SELECT 59220,'56004633',46415,'Mr','Michael','Brian' UNION ALL 
     SELECT 59220,'67693357',128376,'Mr','John','Newtons' 
     DECLARE @sql NVARCHAR(max),@col NVARCHAR(max) 

     SELECT @col=ISNULL(@col+',[','[')+c.data_title+']' 
     FROM (SELECT *,CONVERT(VARCHAR,ROW_NUMBER()OVER(PARTITION BY Tutor_Event_ID ORDER BY Tutor_FAN)) AS rn FROM #t) AS t 
     CROSS APPLY(VALUES(t.rn+'_Tutor_FAN',CONVERT(VARCHAR,Tutor_FAN)),(t.rn+'_Tutor_Individual_ID',CONVERT(VARCHAR,Tutor_Individual_ID)),(t.rn+'_Tutor_Title',Tutor_Title),(t.rn+'_Tutor_First_Name',Tutor_First_Name),(t.rn+'_Tutor_Last_Name',Tutor_Last_Name)) c(data_title,data_value) 

     SET @sql=' 
     SELECT * FROM (
      SELECT t.Tutor_Event_ID,c.data_title,c.data_value 
      FROM (SELECT *,CONVERT(VARCHAR,ROW_NUMBER()OVER(PARTITION BY Tutor_Event_ID ORDER BY Tutor_FAN)) AS rn FROM #t) AS t 
      CROSS APPLY(VALUES(t.rn+''_Tutor_FAN'',CONVERT(VARCHAR,Tutor_FAN)),(t.rn+''_Tutor_Individual_ID'',CONVERT(VARCHAR,Tutor_Individual_ID)),(t.rn+''_Tutor_Title'',Tutor_Title),(t.rn+''_Tutor_First_Name'',Tutor_First_Name),(t.rn+''_Tutor_Last_Name'',Tutor_Last_Name)) c(data_title,data_value) 
     ) n PIVOT(MAX(data_value) FOR data_title IN ('[email protected]+')) p 
     ' 
     EXEC(@sql) 
     IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t 

以下的結果:

 
Tutor_Event_ID 1_Tutor_FAN 1_Tutor_Individual_ID 1_Tutor_Title 1_Tutor_First_Name 1_Tutor_Last_Name 2_Tutor_FAN 2_Tutor_Individual_ID 2_Tutor_Title 2_Tutor_First_Name 2_Tutor_Last_Name 
59220 56004633 46415 Mr Michael Brian 67693357 128376 Mr John Newtons 
-1

我創建了一個支持表(數字)將具有像 數字和字(1,第一) enter image description here