如何使用列名称取消透视 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 才能使其正常工作