2016-11-22 2 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 (или Tutor), указанной в той же строке. Может ли кто-нибудь предложить код SQL для этого?

Большое спасибо заранее, Veronica

+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

Я создал поддерживаемое таблица (Числа), которая будет иметь столбец, такой как num и word (1, first) enter image description here

Смежные вопросы