3

私は持っていますtbl1

   Id  | c1  |  c2  |  c3   |
   ____|_____|______|_______|_
    1     a     b       c 
   ____|_____|______|_______|_
    2     h     j       k
   ____|_____|______|_______|_
    3     t     y       u
   ____|_____|______|_______|_

私は持っていますtbl2

   Id  | c1  |  c2  |  c3   |
   ____|_____|______|_______|_
    1     a     b       D 
   ____|_____|______|_______|_
    2     c     c       c
   ____|_____|______|_______|_
    3     k     l       k
   ____|_____|______|_______|_

各セルを次tbl1の適切な場所と比較する必要がありtbl2ます。

必要な出力は次のとおりです。

   Id  |tbl1 | tbl2 | 
   ____|_____|______| 
    1     a     a     
   ____|_____|______| 
    1     b     b      
   ____|_____|______| 
    1     c     d      
   ____|_____|______| 
    2     h     c     
   ____|_____|______| 
    2     j     c      
   ____|_____|______| 
    2     k     c      
   ____|_____|______| 
          ...
          ...
          ...
          ...

視覚的表現:

ここに画像の説明を入力してください

私は多くのクエリを試しました...しかし成功しませんでした...

4

3 に答える 3

2
select T1.id, T1.tbl1, T2.tbl2
from (
       select U.id, U.tbl1, U.col
       from tbl1
         unpivot (tbl1 for col in (c1, c2, c3)) U
     ) T1
  inner join 
     (
       select U.id, U.tbl2, U.Col
       from tbl2
         unpivot (tbl2 for col in (c1, c2, c3)) U
     ) T2
    on T1.id = T2.id and
       T1.col = T2.col
order by T1.id
于 2012-05-31T05:19:43.293 に答える
2

まず、データのピボットを解除する必要があります。

   select Id, C1, 'C1' as C from tbl1 union all
   select Id, C2, 'C2' as C from tbl1 union all
   select Id, C3, 'C2' as C from tbl1 union all

次に、データを比較できます。

   select coalesce( uTbl1.Id,uTbl2.Id) as Id, uTbl1.C, uTbl2.C
   from (
     select Id, C1 as C, 'C1' as T from tbl1 union all
     select Id, C2 as C, 'C2' as T from tbl1 union all
     select Id, C3 as C, 'C3' as T from tbl1 ) uTbl1
   full outer join (
     select Id, C1 as C, 'C1' as T from tbl2 union all
     select Id, C2 as C, 'C2' as T from tbl2 union all
     select Id, C3 as C, 'C3' as T from tbl2 ) uTbl2
        on uTbl1.Id = uTbl2.Id and  uTbl1.T = uTbl2.T

免責事項: - テストされていません。

CTEで編集:

   ; with 
    uTbl1 as (
     select Id, C1 as C, 'C1' as T from tbl1 union all
     select Id, C2 as C, 'C2' as T from tbl1 union all
     select Id, C3 as C, 'C3' as T from tbl1 ) 
   ,uTbl2 as (
     select Id, C1 as C, 'C1' as T from tbl2 union all
     select Id, C2 as C, 'C2' as T from tbl2 union all
     select Id, C3 as C, 'C3' as T from tbl2 ) 
   select coalesce( uTbl1.Id,uTbl2.Id) as Id, uTbl1.C, uTbl2.C
   from 
      uTbl1
   full outer join 
      uTbl2
         on uTbl1.Id = uTbl2.Id and  uTbl1.T = uTbl2.T
于 2012-05-30T14:22:37.610 に答える
1

3 つのアトミック サブクエリを実行し、次に withUNION ALLを使用して最終結果を取得します。

SELECT tbl1.id, tbl1.c1, tbl2.c1 FROM tbl1
INNER JOIN tbl2 on tbl1.id = tbl2.id

UNION ALL

SELECT tbl1.id, tbl1.c2, tbl2.c2 FROM tbl1
INNER JOIN tbl2 on tbl1.id = tbl2.id

UNION ALL

SELECT tbl1.id, tbl1.c3, tbl2.c3 FROM tbl1
INNER JOIN tbl2 on tbl1.id = tbl2.id

ORDER BY 1  --sort by column 1 (the IDs)
于 2012-05-30T14:24:37.610 に答える