Sql server SQL Server将行透视到列
我已经研究了各种SQLServerPivot问题,但是我无法为我的特定示例实现各种解决方案。我想知道是否有人能为我提供正确的SQL语法,使我能够将行转换为列 我有下表: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
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,第一个)
感谢您对格式的帮助,我不知道它最初为什么会这样出现。现在看起来好多了。