2017-11-28 22 views
0

2つのテーブルを結合し、その結果として、2番目のテーブルの列を最初のテーブルのその列の最大値でオフセットします。SQL Server UNIONとオフセットプライマリキー

例:ALL私はUNIONのような何かを行うことができるようにしたいTableBの

TableAの

a | b | c 
1 | 1 | 1 
2 | 2 | 2 

a | b | c 
1 | 6 | 6 
2 | 7 | 7 

を:私は両方同じ列を持つ2つのテーブルがあるとし結果は次のとおりです。

結果

実際のUNIONを行うことにより
a | b | c 
1 | 1 | 1 
2 | 2 | 2 
3 | 6 | 6 
4 | 7 | 7 

はすべての私の結果は以下のとおりです。

a | b | c 
1 | 1 | 1 
2 | 2 | 2 
1 | 6 | 6 
2 | 7 | 7 

UPDATEの結果:私も私のためにそれを複雑にされたVIEW、にこれを入れたいと思い。事前

+0

明確にするには、tableBの列の列 'a'にtableAの列 'a'の最大値をUNION ALL表に追加する必要がありますか? –

+0

正解ですが、tableBを更新していません。また、これはVIEWになります。 – terminatur

答えて

2

ためのシーケンスを生成する

select a,b,c from tblA 
union all 
select a+t.max_a,b,c from tblB 
cross join (select max(a) as max_a from tblA) t 
+0

これは私が必要としていたものです。ありがとう! – terminatur

-1

おかげで列の値が[A]の両方のテーブルの元の値を追跡する必要がそれをしませんか?代わり

select a = row_number() over (order by a), b, c 
from 
(
    select a, b, c from tableA 
    union all 
    select a, b, c from tableB 
) d 

、使用ROW_NUMBER()は、あなたがテーブルAから最大a値を取得し、テーブルBから列aに追加することができTableBの

select a = coalesce(a, max(a) over() + row_number() over(order by a)), 
    b, c 
from 
(
    select a, b, c 
    from tableA 
    union all 
    select a = NULL, b, c 
    from tableB 
) d 
order by a