2017-01-18 12 views
0

サブクエリで一致を返す構文は何ですか。見つからない場合は、元の結果を返します。これは私が考えることができる最も近い例です。私は合体も使ってみました。CASE文内のサブクエリで一致を返す構文は何ですか?

SELECT bla,foo, 
CASE WHEN bar IN (SELECT bar2 from table) THEN bar2 else bar end as 'bar' 
FROM otherTable 

例を示す時、この私の試み:BAR2にあるバーは、その後、他のバーをBAR2場合

foo | bar | bar2 
-------------------- 
    1 | xxxx | x 
    2 | xxxx | xx 
    3 | x | 
    4 | xxx | 

+0

は、両方のテーブルのためのいくつかのサンプルデータを持つことが本当に良いだろうと期待される出力。 – EoinS

+1

彼らはいつも同じでしょう、2つのテーブルを一緒に関連付けるいくつかの他のフィールドがありますか? –

+0

@hartは必ずしも同じではありません。他のテーブルのbar2カラムにbarが存在する場合は、* local *カラムbar2を返します。そうでない場合は、未処理の値です。このクエリを書くには良い方法があります。 – Bohemian

答えて

1

をこれが原因でない有効な文です:ブール式としてbar in (select bar2 from tt2)行為は、BAR2がクエリに返されません。

select foo, 
     case when bar in (select bar2 from tt2) then bar2 else bar end as bar 
from tt1; 

無効な列名 'BAR2'。

'(TT2からBAR2を選択')場合、これは有効であることができる唯一の1値

select foo, 
     case when bar in (select bar2 from tt2) then (select bar2 from tt2) else bar end as bar 
from tt1; 

を返すサブクエリは複数の値を返しました。 サブクエリが、=、!<、< =、>、> =、またはサブクエリが式 として使用されている場合は、これは許可されません。

これは動作しますが、私はそれはあなたが望むものであるかわからない。ここで

select foo, 
     case when bar in (select bar2 from tt2) then (select top 1 bar2 from tt2) else bar end as bar 
from tt1; 

プレイ:http://rextester.com/UGZA86889

0

すなわちas 'bar'、別名を囲む引用符を削除 - >as bar

SELECT bla, foo, 
CASE WHEN bar IN (SELECT bar2 from table) THEN bar2 else bar end as bar 
FROM otherTable 
+1

カラムエイリアスのシングルクォートは、OPが使用していると思われるSQL Serverの問題であってはなりません。 –

関連する問題