0

次のようなクエリを作成することは可能ですか?

ソース = 2 またはターゲット = 2 のテーブルから a、b または c、d を選択します。

ソースが 2 の場合は a,b を選択し、ターゲットが 2 の場合は c,d を選択します。

これは SQL ステートメントで可能ですか?

4

4 に答える 4

4

次のような「データベース」(テーブルのひどい名前)というテーブルがあるとします。

  a   |  b   |  c   |  d   | source | target 
------+------+------+------+--------+--------
   11 |   22 |   33 |   44 |      1 |      2
  111 |  222 |  333 |  444 |      2 |      2
 1111 | 2222 | 3333 | 4444 |      2 |      1

次に、次のようにクエリできます。

select
   case when source=2 then a else null end as a,
   case when source=2 then b else null end as b,
   case when target=2 then c else null end as c,
   case when target=2 then d else null end as d
from database;

そしてこの結果を得る:

    a |    b |    c |    d 
------+------+------+------
      |      |   33 |   44
  111 |  222 |  333 |  444
 1111 | 2222 |      |     

必要に応じて、source=2 の場合は a と b のみが返され、target=2 の場合は c と c が返されます。

于 2013-06-18T10:20:34.507 に答える
3

あなたはできる:

http://www.postgresql.org/docs/7.4/static/functions-conditional.html

このようなステートメントは、テストするpostgresqlがありませんが、あなたが望むことをするはずです:

SELECT CASE 
        WHEN source = 2 THEN a, b
        WHEN target = 2 THEN c, d
        ELSE 0
END
于 2013-06-18T10:16:59.977 に答える
2
select a,b
from database
where source = 2

union

select c,d
from database
where target = 2

実際の例については、ここを確認してください

于 2013-06-18T10:23:37.947 に答える
1

これはどう:

select a,b,c,d from (select a,b from database where source=2 UNION select c,d from database where target=2)
于 2013-06-18T10:24:29.943 に答える