次の問題があります。ID T-SQLを使用して複数の単一列に結合
テーブルA:RECORD_ID、REFERENCE_ID、Paramの
テーブルB:DOC_ID、NameB
表C:DOC_ID、NameC
TableA.Paramの値に応じて、私は3つのテーブルを結合しようとしています私は制約する「ケース」を使用しようとしましたが、働いていなかった:)
REFERENCE_IDに接合することで、テーブルBまたはCから名前を選択する必要があります
アイデア?
次の問題があります。ID T-SQLを使用して複数の単一列に結合
テーブルA:RECORD_ID、REFERENCE_ID、Paramの
テーブルB:DOC_ID、NameB
表C:DOC_ID、NameC
TableA.Paramの値に応じて、私は3つのテーブルを結合しようとしています私は制約する「ケース」を使用しようとしましたが、働いていなかった:)
REFERENCE_IDに接合することで、テーブルBまたはCから名前を選択する必要があります
アイデア?
あなたはその条件とleft join
にできたとBTW coalesce()
select a.Record_id, a.Reference_id,
coalesce(b.NameB, c.NameC) as name
from TableA as a
left join TableB as b on a.Reference_id = b.Doc_id
and Param = 'B'
and b.STAT = 'A'
left join TableC as c on a.Reference_id = c.Doc_id
and Param = 'C'
and c.STAT = 'A'
で最初のnull以外の名前を取るあなたのクエリが近い(end
を逃した)されました。これはleft join
の
select a.Record_id, a.Reference_id,
case when Param = 'B' then b.NameB
when Param = 'C' then c.NameC
end as name
from TableA as a
left join TableB as b on a.Reference_id = b.Doc_id and b.STAT = 'A'
left join TableC as c on a.Reference_id = c.Doc_id and c.STAT = 'A'
その2番目のバージョンは、おそらくまた、左の結合を使用する必要があります。 – mikeagg
はい、それが最後の文を追加した理由です。 –
しかし、それはあまりにも誤解を招いていると思います。それを変更しました。ありがとう。 –
で働いているだろう、この試してみてください:あなたがサンプルデータと期待される結果を投稿することができた場合、それはまた、あなたを助けるために役立つ、
SELECT a.Record_id, a.Reference_id, b.NameB AS Name
FROM TableA AS a
INNER JOIN TableB AS b ON a.Reference_id = b.Doc_id
WHERE a.Param = 'B'
UNION
SELECT a.Record_id, a.Reference_id, c.NameC AS Name
FROM TableA AS a
INNER JOIN TableC as c ON a.Reference_id = c.Doc_id
WHERE c.Param = 'C'
ユニオンを動作させるには、NameBとNameCの名前を変更する必要がありますか? – mikeagg
@mikeagg: 'union'の最初のクエリは列名を定義します。この場合、最後の列の名前は 'NameB'です。エイリアスは '... b.NameB as Name ... 'のようにはっきりしています。 –
SELECT a.Record_id, a.Reference_id,V.Name
FROM TableA AS a
inner join
(
SELECT Doc_id id, NameB Name,'B' Type from TableB
UNION ALL
SELECT Doc_id ID, NameC name,'C' Type From TableC
) AS V On V.ID=Reference_id AND Type=Param
代わりに、参加左の使用をあなたのクエリで – mcha