2

A という名前の次のテーブルを検討してください。

  State City Rank
   S     C    1
  AB     C1   2
   *     C2   3

そのようなすべての列を選択したい

  1. State が AB の場合、そのようなすべての行を返します
  2. 条件 1 が満たされない場合、状態が * のすべての行が返されます。条件 1 が満たされている場合は、この条件を参照しないでください

上記の例のように、行 2 を取得する必要があります。次のようないくつかのことを試しました

select state
     case when a.state = 'AB' then 1
           when a.state = '*'  then 2
      end as priority   from A  where state in  ('AB','*')  order by priority

しかし、上記のクエリは複数の行を返します。上記の条件に一致する正確な1行が必要です。

助けてください

EDIT1:

パフォーマンスの問題により、サブクエリを避けたい。

4

1 に答える 1

3

これを試して:

select * from A
where state=case
  when exists(select * from A where state='AB') then 'AB'
  else '*'
  end

これは、上記を示すSQL Fiddleです。

于 2013-10-18T19:05:31.567 に答える