如何使用列名称取消透视 table
How to unpivot the table with column Names
我有两个表有相似的记录。我的结果如下:
使用以下查询
Select
New.ParentId
,New.FatherFirstName
,New.FatherLastName
from ParentsUpdationDetails New
where New.parentId=15999
union all
select
Old.ParentId
,Old.FatherFirstName
,Old.FatherLastName
from parents Old
where Old.parentId=15999
我需要逆轴旋转并想要以下输出:
你应该能够使用 CROSS APPLY 和一些 Table 值构造函数来处理这个问题,并使用 INNER JOIN
将它们组合起来
当您将交叉应用与 (VALUES (Field1), (Field2)) 一起使用时,它的行为类似于 UNPIVOT,因为您在 TVC 中列出的每个字段都会得到一行
SELECT ca.Field, ca.New, lj.Old
FROM ParentsUpdationDetails new
CROSS APPLY (
VALUES ('ParentID', CAST(ParentID AS VARCHAR)), -- All datatypes must match
('FatherFirstName', FatherFirstName),
('FatherLastName', FatherLastName)
) ca(Field, New)
INNER JOIN (
SELECT ParentID, Field, Old
FROM Parents old
CROSS APPLY (
VALUES ('ParentID', CAST(ParentID AS VARCHAR)), -- All datatypes must match
('FatherFirstName', FatherFirstName),
('FatherLastName', FatherLastName)
) ca(Field, Old)
) lj ON new.ParentID = lj.ParentID AND ca.Field = lj.Field
WHERE new.ParentID = 15999
请注意,您需要将非 varchar 数据类型转换为 varchar 才能使其正常工作
我有两个表有相似的记录。我的结果如下:
使用以下查询
Select
New.ParentId
,New.FatherFirstName
,New.FatherLastName
from ParentsUpdationDetails New
where New.parentId=15999
union all
select
Old.ParentId
,Old.FatherFirstName
,Old.FatherLastName
from parents Old
where Old.parentId=15999
我需要逆轴旋转并想要以下输出:
你应该能够使用 CROSS APPLY 和一些 Table 值构造函数来处理这个问题,并使用 INNER JOIN
将它们组合起来当您将交叉应用与 (VALUES (Field1), (Field2)) 一起使用时,它的行为类似于 UNPIVOT,因为您在 TVC 中列出的每个字段都会得到一行
SELECT ca.Field, ca.New, lj.Old
FROM ParentsUpdationDetails new
CROSS APPLY (
VALUES ('ParentID', CAST(ParentID AS VARCHAR)), -- All datatypes must match
('FatherFirstName', FatherFirstName),
('FatherLastName', FatherLastName)
) ca(Field, New)
INNER JOIN (
SELECT ParentID, Field, Old
FROM Parents old
CROSS APPLY (
VALUES ('ParentID', CAST(ParentID AS VARCHAR)), -- All datatypes must match
('FatherFirstName', FatherFirstName),
('FatherLastName', FatherLastName)
) ca(Field, Old)
) lj ON new.ParentID = lj.ParentID AND ca.Field = lj.Field
WHERE new.ParentID = 15999
请注意,您需要将非 varchar 数据类型转换为 varchar 才能使其正常工作