Sql server SQL Server将行透视到列

Sql server SQL Server将行透视到列,sql-server,pivot,Sql Server,Pivot,我已经研究了各种SQLServerPivot问题,但是我无法为我的特定示例实现各种解决方案。我想知道是否有人能为我提供正确的SQL语法,使我能够将行转换为列 我有下表: Tutor_Event_ID Tutor_FAN Tutor_Individual_ID Tutor_Title Tutor_First_Name Tutor_Last_Name 59220 56004633 46415

我已经研究了各种SQLServerPivot问题,但是我无法为我的特定示例实现各种解决方案。我想知道是否有人能为我提供正确的SQL语法,使我能够将行转换为列

我有下表:

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
这里的挑战是我需要跨多个字段进行转置,我不知道这些列可能包含的所有值,但本质上是每个事件都有一行,同一行上列出了导师(或导师)信息。 有人能推荐一个SQL代码来实现这一点吗

多谢各位,
Veronica

您可以参考以下示例,希望对您有所帮助

        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 ('+@col+')) 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家教个人家教身份证1家教职称1家教姓名家教姓氏2家教粉丝2家教个人身份证2家教姓氏 59220 56004633 46415 Michael Brian先生67693357 128376 John Newton先生
我已经创建了一个受支持的表(数字),其列如下 num和word(1,第一个)

感谢您对格式的帮助,我不知道它最初为什么会这样出现。现在看起来好多了。