2017-06-26 7 views
0

私は2つのテーブルを一緒に結合しようとしています。問題は、最良の結合ロジックから悪い結合ロジックまで、いくつかの方法があることです。私は毎回異なる結合条件を使用して、同じテーブルを複数回左結合してから、caseスイッチを使用してベストマッチから変数値を選択したいと考えています。良いことを説明するための例は以下の通りです:TSQL - 異なる左の結合から変数を選択するためにケーススイッチを使用

select s.Product, 
    (case when c1.ID is not null then c1.ID 
    case when c2.ID is not null then c2.ID 
    case when c3.ID is not null then c3.ID 
    case when c4.ID is not null then c4.ID 
    else NULL) as ID 
from 
    dbo.Table1 as s 
    left join [dbo].Table2 as c1 on %some join logic% 
    left join [dbo].Table2 as c2 on %some join logic% 
    left join [dbo].Table2 as c3 on %some join logic% 
    left join [dbo].Table2 as c4 on %some join logic% 
where 
    (
     c1.SKU is not null 
     or c2.sku is not null 
     or c3.sku is not null 
     or c4.sku is not null 
    ) 

問題はこのようなものが働いていないことである - 私は、エラー'Incorrect syntax near the keyword 'case'を取得します「。 3行目(2番目のcaseスイッチ)。どのようにこれに取り組むためのアドバイス?

+0

「ケース」に「END」がありません。 'CASE ... END' – Eric

+0

@Eric nope、私はすでにこれを試みました - 同じエラーメッセージ –

答えて

1

選択ロジックを処理するのに、CASEという表現は必要ありません。代わりに、あなたはちょうどあなたが欲しいために、NULLない最初のIDを選択するCOALESCE()機能を使用することができます。

select 
    s.Product, 
    coalesce(c1.ID, c2.ID, c3.ID, c4.ID) AS ID 
from dbo.Table1 as s 
... 

あなたの元CASE表現を使用したい場合は、私たちは繰り返しませんで、それを修正することができます

select 
    s.Product, 
    case when c1.ID is not null then c1.ID 
     when c2.ID is not null then c2.ID 
     when c3.ID is not null then c3.ID 
     when c4.ID is not null then c4.ID end as ID 
from dbo.Table1 as s 
... 
+0

ありがとう、それはうまくいきます –

関連する問題