Sql server 将不同表中的多列转换为行
我正在尝试将两个表中的多个列转换为行,但我不知道如何开始 我知道如何取消一张桌子,只是不知道如何加入他们;如果这有道理的话 所以我有一个这样的主表:Sql server 将不同表中的多列转换为行,sql-server,transpose,Sql Server,Transpose,我正在尝试将两个表中的多个列转换为行,但我不知道如何开始 我知道如何取消一张桌子,只是不知道如何加入他们;如果这有道理的话 所以我有一个这样的主表: mainId Date Rd HT AT C1 C2 C3 C4 12 8/9/19 20:00 1 POOL WICH 0 0 2 0 13 8/10/19 12:30 1 HAM MCIT 2 0 2 0
mainId Date Rd HT AT C1 C2 C3 C4
12 8/9/19 20:00 1 POOL WICH 0 0 2 0
13 8/10/19 12:30 1 HAM MCIT 2 0 2 0
第二个表(通过mainId链接到主表):
我想要实现的是:
mainId Date Rd HT AT Column1 Column2
12 8/9/19 20:00 1 POOL WICH MO_H 2.09
12 8/9/19 20:00 1 POOL WICH MO_D 3.56
12 8/9/19 20:00 1 POOL WICH MO_A 4.1
12 8/9/19 20:00 1 POOL WICH O0.5 1.063
13 8/10/19 12:30 1 HAM MCIT MO_H 1.71
13 8/10/19 12:30 1 HAM MCIT MO_D 4.15
13 8/11/19 12:30 1 HAM MCIT MO_A 5.65
13 8/12/19 12:30 1 HAM MCIT O0.5 1.048
提前感谢。这里有一个选项,它可以在不实际使用动态SQL的情况下动态地取消归档数据。这种方法是XML。。。JSON版本与您的列名
[O0.5]
请注意,您只需要排除某些列。。。不在('Id','mainId')中
我还应该补充:空值将被排除
示例
Select A.[mainId]
,A.[Date]
,A.[Rd]
,A.[HT]
,A.[AT]
,D.*
From Main A
Join Second B on A.mainId=B.mainId
Cross Apply ( values ( convert(xml,(Select B.* for XML RAW)) ) ) C(XMLData)
Cross Apply (
Select Item = xAttr.value('local-name(.)', 'varchar(100)')
,Value = xAttr.value('.','varchar(max)') --<< use proper data type
From XMLData.nodes('//@*') xNode(xAttr)
Where xAttr.value('local-name(.)', 'varchar(100)') not in ('Id','mainId')
) D
Select A.[mainId]
,A.[Date]
,A.[Rd]
,A.[HT]
,A.[AT]
,D.*
From Main A
Join Second B on A.mainId=B.mainId
Cross Apply ( values ( convert(xml,(Select B.* for XML RAW)) ) ) C(XMLData)
Cross Apply (
Select Item = xAttr.value('local-name(.)', 'varchar(100)')
,Value = xAttr.value('.','varchar(max)') --<< use proper data type
From XMLData.nodes('//@*') xNode(xAttr)
Where xAttr.value('local-name(.)', 'varchar(100)') not in ('Id','mainId')
) D
mainId Date Rd HT AT Item Value
12 8/9/19 20:00 1 POOL WICH MO_H 2.09
12 8/9/19 20:00 1 POOL WICH MO_D 3.56
12 8/9/19 20:00 1 POOL WICH MO_A 4.10
12 8/9/19 20:00 1 POOL WICH O.05 1.063
13 8/10/19 12:30 1 HAM MCIT MO_H 1.71
13 8/10/19 12:30 1 HAM MCIT MO_D 4.15
13 8/10/19 12:30 1 HAM MCIT MO_A 5.65
13 8/10/19 12:30 1 HAM MCIT O.05 1.048