2016-09-16 2 views
0

私はこのクエリを持っています。であるためpostgresのSQLでケーステキストを設定

Select '1' as "Test" , (CASE WHEN (True) Then '2' ELSE '3' END) as Two/Three. 

私の問題は解決しません

Select '1' as "Test" , (CASE WHEN (True) Then '2' ELSE '3' END) 

Id case text 
1  2 

私はケースのテキストは二つの真すなわち

Id Two 
    1  2 

になりたいとSQLは

Select '1' as "Test" , (CASE WHEN (False) Then '2' ELSE '3' END) 

Id Three 
1  3 

ときtrueまたはfalseが出力されます。真のときはカラム名として2を、偽のときは3を欲しい。今のところ、私はそれをハードコーディングしました。

+1

TRUEは常に真である... – jarlh

+0

は、私はいくつかのBIツールパラメータに基づいて真偽を取得します。私はちょうど以上の例を与えている – TBAG

+0

これを削除しようとする間にスラッシュを削除する2/Threee選択 "1"として "テスト"、(ケースを真(次に) '2' ELSE '3')を2_or_Three @TBAG – JYoThI

答えて

2

これはSQLでは実行できません。表の内容に基づいて列名を選択する方法はありません(表に複数の行があり、列の値が異なる場合はどうなりますか?)。

あなたはとすることができます。 doは、ブール値のさまざまな値について異なるクエリをデータベースに送信します。

しかし、内容に基づいて列名を選択する考えは変です。あなたは本当にそれをする必要がありますか?

1

単純なSQL文では、SELECTが名前と番号で固定された列のセットを返すので、あなたは望むことができません。動的SQLを使用して列の名前を変更できます。

しかし、なぜだけではなくそれはあなたが望むものである場合は、フラグ値を持つ2つの別々の列を返す:

Select '1' as "Test", 
     (case when . . . then 1 else 0 end) as flag_2, 
     (case when not (. . .) then 1 else 0 end) as flag_3 

次いで、カラムの存在のではなく、列にを見てあなたが望む情報を得るために。

あるいは、列の値を入れる:

Select '1' as "Test", 
     (case when . . . then '2' else '3' end) as flag