2017-08-31 8 views
0

IN句でCASEを使用して2つのケース間で値を選択する場合、このクエリを実行しようとしています。INtime句がCASEをRedshiftで使用する場合

問題は、ハードコード値( 'aaa'、 'bbb')にあります。私はTHENの内部に複数の値を追加することはできませんので、通常のIN値として機能します。私は変数を渡すので、ハードコード値は動的になります。

select kdo.field0 
from tb1 data1 inner join tb2 kdo 
on kdo.field1 = 'xxx' 
    and kdo.field2::DATE >='2017-08-01'::DATE 
    and kdo.field0 
     in (case when 'asd'!='' then 'aaa','bbb' 
      else tb2.field0 end); 

また、特定のハードコード値を取得するためにTHEN内でサブクエリ選択を使用しましたが、それは役に立たないこともあります。単一のハードコーディングされた値を使用すると、明らかに通常どおり動作します。

答えて

1
IN外のご CASEを移動

select kdo.field0 
from tb1 data1 inner join tb2 kdo 
on kdo.field1 = 'xxx' 
    and kdo.field2::DATE >='2017-08-01'::DATE 
    and case when 'asd'!='' then kdo.field0 in ('aaa','bbb') 
     else kdo.field0=tb2.field0 end; 

しかし、私はあなたが'asd'以来'asd'!=''によって何を意味するのかはわからないが、文字列であり、これは常にもtrue

を返します、あなたの中else tb2.field0 end);一部ステートメントは配列オプションではなく、列名なので、これはちょうどkdo.field0=tb2.field0に変換されると仮定します。前のケースオプションがfalseの場合、kdo.field0が基本的に結合条件である

+0

'asd'をテスト目的で使用しました。それについて言及してくれないのは残念です。これは実際のクエリの変数に置き換えられます。 tb2.field0を使用すると元のクエリと同様の機能が実現します。提案していただきありがとうございます。私はこのような簡単な質問を混乱させてしまったことを嘆いています。 –

+0

@HarshitBhatt正解の場合はそれをマークしてください – AlexYes

関連する問題