Как отключить таблицу с именами столбцов

У меня есть две таблицы с похожими записями. У меня есть результат следующим образом:

используя следующий запрос

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

Мне нужно отключить и хочу следующий вывод:

1 ответ

Решение

Вы должны быть в состоянии справиться с этим, используя CROSS APPLY с несколькими конструкторами табличных значений и комбинируя их с помощью INNER JOIN.

когда вы используете Cross Apply с (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 в varchars, чтобы это работало

Другие вопросы по тегам