2017-01-30 7 views
1

私は次のクエリを作成しようとしています。SQL ServerのCASEステートメントの列のそれぞれの値を返す方法

表A(a、b、c、d、e、f、g、h) 表B(a、b、c、d、e、f、g、h、i、j、表Aの行のサブセット。

declare @tableA table (a int, b int, c int, d int, e int, f int, g int, h int) 
insert into @tableA values 
(1,2,3,4,5,5,7,8), 
(1,2,3,4,5,6,7,8), 
(2,3,4,5,6,7,8,9), 
(2,3,4,5,6,7,8,8), 
(2,4,5,6,7,8,8,9), 
(3,4,5,6,7,8,9,9) 

declare @tableB table (a int, b int, c int, d int, e int, f int, g int, h int, i int, j int k int) 
insert into @tableB values 
(1,2,3,4,5,6,7,8,9,9,0), 
(2,3,4,5,6,7,8,8,1,9,0), 
(2,4,5,6,7,8,8,9,5,8,9), 
(3,4,5,6,7,8,9,9,7,8,9) 

両方の表が同じ列を持ち、重複した行を持つことに注意してください。 今、テーブルAのすべての行を返すクエリが必要です。この行がテーブルBに存在しない場合は、NULLになる余分な列( 'iI'など)を返します。

(1,2,3,4,5,5,7,8,NULL) 

(1,2,3,4,5,6,7,8,9) 

(2,3,4,5,6,7,8,9,NULL) 

(2,3,4,5,6,7,8,8,1) 

(2,4,5,6,7,8,8,9,5) 

(3,4,5,6,7,8,9,9,7) 

あなたは私のクエリを記述助けてください:テーブルB は、その後のクエリは、次のような出力を返す必要があります。私はこれらのテーブルを結合しようとしたcase文を使用しますが、それはcase文が複数の値に

+0

'から完全表結合表B b a.a = b.aとa.b = b.bとa.c = b.c ... etc'?あなたの結果が私が得ることができるあなたのデータセットを反映していないので、伝えにくいです。 – scsimon

+0

"両方のテーブルに同じ列[...]"があることに注意してください。 "...行が重複しています..."そうではありません! –

答えて

2

を返すことができませんあなたの問題を解決する必要があり、私は左外部結合を言うだろうというエラーが私をスロー:

select a.*, b.i 
from TableA a left outer join TableB b on a.a = b.a and a.b = b.b ... 

左外部結合にはAのすべてのタプルが含まれ、Bの追加の列には、対応するタプルが存在する場合は値が、それ以外の場合はNULLが入力されます。

0
declare @tableA table (a int, b int, c int, d int, e int, f int, g int, h int) 
insert into @tableA values 
(1,2,3,4,5,5,7,8), 
(1,2,3,4,5,6,7,8), 
(2,3,4,5,6,7,8,9), 
(2,3,4,5,6,7,8,8), 
(2,4,5,6,7,8,8,9), 
(3,4,5,6,7,8,9,9) 

declare @tableB table (a int, b int, c int, d int, e int, f int, g int, h int, i int, j int, k int) 
insert into @tableB values 
(1,2,3,4,5,6,7,8,9,9,0), 
(2,3,4,5,6,7,8,8,1,9,0), 
(2,4,5,6,7,8,8,9,5,8,9), 
(3,4,5,6,7,8,9,9,7,8,9) 

select 
    a.*, 
    b.i, 
    b.j, 
    b.k 
from 
    @tableA a 
left outer join 
    @tableB b on a.a = b.a and a.b = b.b and a.c = b.c and a.d = b.d and a.e = b.e and a.f = b.f and a.g = b.g and a.h = b.h 
関連する問題