1

ケースと結合する方法はありますか?

何かのようなもの

select * from abba 
   case when a=b then 
      join acdc on abba.id=acdc.id
   when b=c then 
      join bebop on abba.id=bebop.id 
   end

これを行う方法はありますか?

よろしくジョー

4

2 に答える 2

6

これを行う通常の方法は、両方のテーブルを LEFT JOINし、CASE 条件に基づいて値を選択することです。

SELECT *, CASE WHEN a=b THEN acdc.myField ELSE bebop.myField END AS myField
  FROM abba 
       LEFT JOIN acdc ON abba.id=acdc.id 
       LEFT JOIN bebop ON abba.id=bebop.id
于 2013-12-11T08:58:37.940 に答える
0

クエリが動的でない場合、no sinceステートメントは、、またはその他のデータ型caseなどのリテラル値のみを返します。stringint

しかし、回避策があります - dynamic sql。ステートメント全体を文字列として扱います。次に、文字列内でケースを操作できます。

例えば:

declare @query varchar(1000)
set @query = 'select * from abba '+
                case when @a=@b then 'join acdc on abba.id=acdc.id'
                     when @b=@c then 'join bebop on abba.id=bebop.id'
                end
exec(@query)

しかしもちろん、あなたの a=b & b=c は何らかのSQL変数でなければなりません。

于 2013-12-11T09:03:48.563 に答える