2016-04-28 7 views
0

同様のレコードを持つ2つのテーブルがあります。次のように私は結果を持っている:列名を使用してテーブルをアンピボットする方法

次のクエリ

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 

を使用して

enter image description here

私は次の出力をアンピボットして欲しいする必要があります。

enter image description here

+0

同じ列に数値と文字列を格納します。それは良い考えのようには見えません。 –

+0

は、すべてvarcharデータ型に変換する方法はありません –

答えて

0

あなたはできるはずですいくつかのテーブル値コンストラクタでCROSS APPLYを使用してこれを処理し、INNER JOIN

あなたはクロス(VALUES(フィールド1)、(フィールド2))を適用する使用それはあなたがあなたの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に変換します

+0

これはうまく動作します!お返事をありがとうございます ! –

関連する問題