SQL Server 2012将数据从一列拆分为多列

SQL Server 2012将数据从一列拆分为多列,sql,sql-server,sql-server-2012,pivot,Sql,Sql Server,Sql Server 2012,Pivot,我有三列很长的数据,如下所示。 数据以214行块的形式添加到数据库中,每行都是该时间戳处不同变量的值。每个数据块214行中的每一行的时间戳都相同。我试图将这些块分解成单独的列/行(如果可能的话,我希望这是动态的,而不是输入列或行的每个名称) 下面的任何一种解决方案都有效 我曾研究过使用PIVOT,但这似乎需要对数据进行算术组合,而不仅仅是将其拆分为单独的列/行 这将用于生成一个SQL报告,该报告大约每月查看一次,因此性能并不是什么大问题 以下@Rigerta Demiri代码生成的动态轴

我有三列很长的数据,如下所示。

数据以214行块的形式添加到数据库中,每行都是该时间戳处不同变量的值。每个数据块214行中的每一行的时间戳都相同。我试图将这些块分解成单独的列/行(如果可能的话,我希望这是动态的,而不是输入列或行的每个名称)

下面的任何一种解决方案都有效

我曾研究过使用PIVOT,但这似乎需要对数据进行算术组合,而不仅仅是将其拆分为单独的列/行

这将用于生成一个SQL报告,该报告大约每月查看一次,因此性能并不是什么大问题


以下@Rigerta Demiri代码生成的动态轴

    select TagTimestamp,  AA_Mode, CDR01_Torque_Max, CDR02_Torque_Max, CDR03_Torque_Max, CDR04_Torque_Max, CDR05_Torque_Max, CDR06_Index_Position_0, CDR06_Index_Position_1, CDR06_Torque_Max, CDR07_Index_Position_0, CDR07_Index_Position_1, CDR07_Torque_Max, CDR09_Axis_Offset, CDR09_Torque_Max, CDR10_Torque_Max, CDR11_Torque_Max, CDR12_Torque_Max, CDR13_Torque_Max, CDR14_Index_Position_3, CDR14_Index_Position_4, CDR14_Torque_Max, CDR17_Axis_Offset, CDR17_Slave_Scaling, CDR17_Torque_Max, CDR18_Axis_Offset, CDR18_Slave_Scaling, CDR18_Torque_Max, CDR19_Axis_Offset, CDR19_Slave_Scaling, CDR19_Torque_Max, CDR20_Axis_Offset, CDR20_Slave_Scaling, CDR20_Torque_Max, CDR21_Axis_Offset, CDR21_Slave_Scaling, CDR21_Torque_Max, CDR22_Axis_Offset, CDR22_Slave_Scaling, CDR22_Torque_Max, CDR25_Axis_Offset, CDR25_Slave_Scaling, CDR25_Torque_Max, CDR26_Axis_Offset, CDR26_Slave_Scaling, CDR26_Torque_Max, CDR27_Axis_Offset, CDR27_Slave_Scaling, CDR27_Torque_Max, CDR28_Axis_Offset, CDR28_Slave_Scaling, CDR28_Torque_Max, CDR29_Axis_Offset, CDR29_Slave_Scaling, CDR29_Torque_Max, CDR30_Axis_Offset, CDR30_Slave_Scaling, CDR30_Torque_Max, CDR33_Index_Position_1, CDR33_Index_Position_2, CDR33_Torque_Max, CDR34_Torque_Max, CDR35_Torque_Max, CDR36_Slave_Scaling, CDR36_Torque_Max, CDR37_Slave_Scaling, CDR37_Torque_Max, CDR38_Slave_Scaling, CDR38_Torque_Max, CVFD42_Speed_Comp, CVFD43_Speed_Comp, CVFD44_Speed_Comp, CVFD45_Speed_Comp, CVFD46_Speed_Comp, CVFD47_Speed_Comp, CVFD48_Speed_Comp, Carton_Vac_Pick_Max_Mispick_Limit, Changeover_Points[0], Changeover_Points[100], Changeover_Points[101], Changeover_Points[10], Changeover_Points[11], Changeover_Points[12], Changeover_Points[13], Changeover_Points[14], Changeover_Points[15], Changeover_Points[16], Changeover_Points[17], Changeover_Points[18], Changeover_Points[19], Changeover_Points[1], Changeover_Points[20], Changeover_Points[21], Changeover_Points[22], Changeover_Points[23], Changeover_Points[24], Changeover_Points[25], Changeover_Points[26], Changeover_Points[27], Changeover_Points[28], Changeover_Points[29], Changeover_Points[2], Changeover_Points[30], Changeover_Points[31], Changeover_Points[32], Changeover_Points[33], Changeover_Points[34], Changeover_Points[35], Changeover_Points[36], Changeover_Points[37], Changeover_Points[38], Changeover_Points[39], Changeover_Points[3], Changeover_Points[40], Changeover_Points[41], Changeover_Points[42], Changeover_Points[43], Changeover_Points[44], Changeover_Points[45], Changeover_Points[46], Changeover_Points[47], Changeover_Points[48], Changeover_Points[49], Changeover_Points[4], Changeover_Points[50], Changeover_Points[51], Changeover_Points[52], Changeover_Points[53], Changeover_Points[54], Changeover_Points[55], Changeover_Points[56], Changeover_Points[57], Changeover_Points[58], Changeover_Points[59], Changeover_Points[5], Changeover_Points[60], Changeover_Points[61], Changeover_Points[62], Changeover_Points[63], Changeover_Points[64], Changeover_Points[65], Changeover_Points[66], Changeover_Points[67], Changeover_Points[68], Changeover_Points[69], Changeover_Points[6], Changeover_Points[70], Changeover_Points[71], Changeover_Points[72], Changeover_Points[73], Changeover_Points[74], Changeover_Points[75], Changeover_Points[76], Changeover_Points[77], Changeover_Points[78], Changeover_Points[79], Changeover_Points[7], Changeover_Points[80], Changeover_Points[81], Changeover_Points[82], Changeover_Points[83], Changeover_Points[84], Changeover_Points[85], Changeover_Points[86], Changeover_Points[87], Changeover_Points[88], Changeover_Points[89], Changeover_Points[8], Changeover_Points[90], Changeover_Points[91], Changeover_Points[92], Changeover_Points[93], Changeover_Points[94], Changeover_Points[95], Changeover_Points[96], Changeover_Points[97], Changeover_Points[98], Changeover_Points[99], Changeover_Points[9], Delta_1_Effector_Cycle_Jam_Delay, Delta_2_Effector_Cycle_Jam_Delay, Delta_2_Loading_Index_4_XZ_0, Delta_2_Loading_Index_4_XZ_1, Delta_2_Loading_Index_6_XZ_0, Delta_2_Loading_Index_6_XZ_1, Delta_2_Loading_Index_7_XZ_0, Delta_2_Loading_Index_7_XZ_1, Delta_3_Effector_Cycle_Jam_Delay, Delta_4_Effector_Cycle_Jam_Delay, Delta_4_Loading_Index_4_XZ_0, Delta_4_Loading_Index_4_XZ_1, Delta_4_Loading_Index_6_XZ_0, Delta_4_Loading_Index_6_XZ_1, Delta_4_Loading_Index_7_XZ_0, Delta_4_Loading_Index_7_XZ_1, Delta_5_Effector_Cycle_Jam_Delay, Delta_6_Effector_Cycle_Jam_Delay, Discharge_Carton_Blocked_Delay_On, Discharge_Carton_Dischrage_Jam_Delay, Glue_Low_Level_Supply_Limit, Laner_Conveyor_Product_Count1, Laner_Conveyor_Product_Count2, Laner_Conveyor_Side_Belts_Off_Delay, Machine_Speed, Magazine_Advance_Delay, Magazine_Advance_Fault_Delay, Magzine_Low_Level_ShutDown_Limit, Major_FLap_Inspection_Cons_Fail_Limit, Master_Data_Code, Minor_Flap_Inspection_Cons_Fail_Limit, Outer_Carton_Mode, Recipe_Name, Recipe_Number, ThirtySix_Count_Mode, Vision_Job_Data
              from 
                (
                    select TagTimestamp, TagItemID, TagValue
                    from #allData2
                ) x
              pivot ( max(TagValue) for TagItemID in ( AA_Mode, CDR01_Torque_Max, CDR02_Torque_Max, CDR03_Torque_Max, CDR04_Torque_Max, CDR05_Torque_Max, CDR06_Index_Position_0, CDR06_Index_Position_1, CDR06_Torque_Max, CDR07_Index_Position_0, CDR07_Index_Position_1, CDR07_Torque_Max, CDR09_Axis_Offset, CDR09_Torque_Max, CDR10_Torque_Max, CDR11_Torque_Max, CDR12_Torque_Max, CDR13_Torque_Max, CDR14_Index_Position_3, CDR14_Index_Position_4, CDR14_Torque_Max, CDR17_Axis_Offset, CDR17_Slave_Scaling, CDR17_Torque_Max, CDR18_Axis_Offset, CDR18_Slave_Scaling, CDR18_Torque_Max, CDR19_Axis_Offset, CDR19_Slave_Scaling, CDR19_Torque_Max, CDR20_Axis_Offset, CDR20_Slave_Scaling, CDR20_Torque_Max, CDR21_Axis_Offset, CDR21_Slave_Scaling, CDR21_Torque_Max, CDR22_Axis_Offset, CDR22_Slave_Scaling, CDR22_Torque_Max, CDR25_Axis_Offset, CDR25_Slave_Scaling, CDR25_Torque_Max, CDR26_Axis_Offset, CDR26_Slave_Scaling, CDR26_Torque_Max, CDR27_Axis_Offset, CDR27_Slave_Scaling, CDR27_Torque_Max, CDR28_Axis_Offset, CDR28_Slave_Scaling, CDR28_Torque_Max, CDR29_Axis_Offset, CDR29_Slave_Scaling, CDR29_Torque_Max, CDR30_Axis_Offset, CDR30_Slave_Scaling, CDR30_Torque_Max, CDR33_Index_Position_1, CDR33_Index_Position_2, CDR33_Torque_Max, CDR34_Torque_Max, CDR35_Torque_Max, CDR36_Slave_Scaling, CDR36_Torque_Max, CDR37_Slave_Scaling, CDR37_Torque_Max, CDR38_Slave_Scaling, CDR38_Torque_Max, CVFD42_Speed_Comp, CVFD43_Speed_Comp, CVFD44_Speed_Comp, CVFD45_Speed_Comp, CVFD46_Speed_Comp, CVFD47_Speed_Comp, CVFD48_Speed_Comp, Carton_Vac_Pick_Max_Mispick_Limit, Changeover_Points[0], Changeover_Points[100], Changeover_Points[101], Changeover_Points[10], Changeover_Points[11], Changeover_Points[12], Changeover_Points[13], Changeover_Points[14], Changeover_Points[15], Changeover_Points[16], Changeover_Points[17], Changeover_Points[18], Changeover_Points[19], Changeover_Points[1], Changeover_Points[20], Changeover_Points[21], Changeover_Points[22], Changeover_Points[23], Changeover_Points[24], Changeover_Points[25], Changeover_Points[26], Changeover_Points[27], Changeover_Points[28], Changeover_Points[29], Changeover_Points[2], Changeover_Points[30], Changeover_Points[31], Changeover_Points[32], Changeover_Points[33], Changeover_Points[34], Changeover_Points[35], Changeover_Points[36], Changeover_Points[37], Changeover_Points[38], Changeover_Points[39], Changeover_Points[3], Changeover_Points[40], Changeover_Points[41], Changeover_Points[42], Changeover_Points[43], Changeover_Points[44], Changeover_Points[45], Changeover_Points[46], Changeover_Points[47], Changeover_Points[48], Changeover_Points[49], Changeover_Points[4], Changeover_Points[50], Changeover_Points[51], Changeover_Points[52], Changeover_Points[53], Changeover_Points[54], Changeover_Points[55], Changeover_Points[56], Changeover_Points[57], Changeover_Points[58], Changeover_Points[59], Changeover_Points[5], Changeover_Points[60], Changeover_Points[61], Changeover_Points[62], Changeover_Points[63], Changeover_Points[64], Changeover_Points[65], Changeover_Points[66], Changeover_Points[67], Changeover_Points[68], Changeover_Points[69], Changeover_Points[6], Changeover_Points[70], Changeover_Points[71], Changeover_Points[72], Changeover_Points[73], Changeover_Points[74], Changeover_Points[75], Changeover_Points[76], Changeover_Points[77], Changeover_Points[78], Changeover_Points[79], Changeover_Points[7], Changeover_Points[80], Changeover_Points[81], Changeover_Points[82], Changeover_Points[83], Changeover_Points[84], Changeover_Points[85], Changeover_Points[86], Changeover_Points[87], Changeover_Points[88], Changeover_Points[89], Changeover_Points[8], Changeover_Points[90], Changeover_Points[91], Changeover_Points[92], Changeover_Points[93], Changeover_Points[94], Changeover_Points[95], Changeover_Points[96], Changeover_Points[97], Changeover_Points[98], Changeover_Points[99], Changeover_Points[9], Delta_1_Effector_Cycle_Jam_Delay, Delta_2_Effector_Cycle_Jam_Delay, Delta_2_Loading_Index_4_XZ_0, Delta_2_Loading_Index_4_XZ_1, Delta_2_Loading_Index_6_XZ_0, Delta_2_Loading_Index_6_XZ_1, Delta_2_Loading_Index_7_XZ_0, Delta_2_Loading_Index_7_XZ_1, Delta_3_Effector_Cycle_Jam_Delay, Delta_4_Effector_Cycle_Jam_Delay, Delta_4_Loading_Index_4_XZ_0, Delta_4_Loading_Index_4_XZ_1, Delta_4_Loading_Index_6_XZ_0, Delta_4_Loading_Index_6_XZ_1, Delta_4_Loading_Index_7_XZ_0, Delta_4_Loading_Index_7_XZ_1, Delta_5_Effector_Cycle_Jam_Delay, Delta_6_Effector_Cycle_Jam_Delay, Discharge_Carton_Blocked_Delay_On, Discharge_Carton_Dischrage_Jam_Delay, Glue_Low_Level_Supply_Limit, Laner_Conveyor_Product_Count1, Laner_Conveyor_Product_Count2, Laner_Conveyor_Side_Belts_Off_Delay, Machine_Speed, Magazine_Advance_Delay, Magazine_Advance_Fault_Delay, Magzine_Low_Level_ShutDown_Limit, Major_FLap_Inspection_Cons_Fail_Limit, Master_Data_Code, Minor_Flap_Inspection_Cons_Fail_Limit, Outer_Carton_Mode, Recipe_Name, Recipe_Number, ThirtySix_Count_Mode, Vision_Job_Data) )p  
          order by TagTimestamp
上面代码的问题是,我在一些标记名中使用了特殊字符“[”和“]”,这导致sql出错。删除这些字符会使代码正常工作

A将完成这项工作,以防您还不知道所有可能的
TagItemIDs
。如果你这样做了,一个简单的枢轴也会起作用

示例代码:

declare @cols_tagItems as nvarchar(max)
     ,  @cols_tagItems_max as nvarchar(max)
     ,  @query  as nvarchar(max)

select @cols_tagItems = stuff((select distinct ', ' + TagItemID from #table for xml path(''), type ).value('.', 'nvarchar(max)') ,1,1,'')
 select @cols_tagItems

set @query = 'select TagTimestamp, ' + @cols_tagItems + '
                  from 
                    (
                        select TagTimestamp, TagItemID, TagValue
                        from #table 
                    ) x
                  pivot ( max(TagValue) for TagItemID in (' + @cols_tagItems + ') )p  
              order by TagTimestamp'
select @query
execute sp_executesql @query;
您可以查看正在运行的演示。 请注意,我只包含了三个
TagItemIds
,并为它们分配了一些
TagValues

A将完成这项工作,以防您还不知道所有可能的
TagItemIDs
。如果你这样做了,一个简单的枢轴也会起作用

示例代码:

declare @cols_tagItems as nvarchar(max)
     ,  @cols_tagItems_max as nvarchar(max)
     ,  @query  as nvarchar(max)

select @cols_tagItems = stuff((select distinct ', ' + TagItemID from #table for xml path(''), type ).value('.', 'nvarchar(max)') ,1,1,'')
 select @cols_tagItems

set @query = 'select TagTimestamp, ' + @cols_tagItems + '
                  from 
                    (
                        select TagTimestamp, TagItemID, TagValue
                        from #table 
                    ) x
                  pivot ( max(TagValue) for TagItemID in (' + @cols_tagItems + ') )p  
              order by TagTimestamp'
select @query
execute sp_executesql @query;
您可以查看正在运行的演示。
请注意,我只包含了三个
TagItemIds
,并为它们分配了一些
TagValues

请添加文本格式大于图像的示例数据请添加文本格式大于图像的示例数据Hanks我会看一下并让您知道它是如何工作的。您的代码工作正常问题是TagItemID“[”和“]中有sql特殊字符“感谢您在我删除这些角色后提供的帮助。很高兴提供帮助!”)谢谢,我会看一看,并让你知道它是如何工作的。你的代码工作得很好。问题是我在TagItemID“[”和“]”中有sql特殊字符。谢谢你在我删除这些字符后提供的帮助。很高兴提供帮助!:)