1

1 つのクエリでいくつかの異なる条件/優先度を使用して並べ替えたいテーブルが 1 つあります。

たとえば、'User' という名前のテーブルには 5 つの列があります。

userID
userName
age
gender
birthday

年齢、性別、誕生日が null の可能性がある場合、クエリが次の優先順位でテーブル行を返すことを願っています。

1. Age, gender and birthday is not null,
2. Age, gender is not null,
3. Age is not null,
4. Then the rest of the rows

UNION、UNION ALL、および ORDER BY IF を調べましたが、結果を得ることができませんでした (クエリが間違っていた可能性があります)。

誰かがこれで私を助けてくれることを願っています。ありがとうございました。

4

2 に答える 2

3

優先度ごとに満たす必要のある条件についての質問は明確ではありませんが、次のことからアイデアを得ることができます。

select   *
from     mytable
order by 
         case when age is null and gender is null and birthday is null then 1
              when age is null and gender is null and birthday is not null then 2
              when age is null and gender is not null and birthday is not null then 3
              when age is not null and gender is not null and birthday is not null then 4
              else 5
         end

編集:フォーマットが不足しているためにあなたの質問を間違って読んだと思います。NULLとNOT NULLが混同されましたが、あなたはその考えを理解しています...

于 2012-07-10T15:14:20.270 に答える
0

これは、次の順序による単純な問題です。

order by (case when age is not null and birthday is not null and gender is not null then 1
               when age is not null and birthday is not null then 2
               when age is not null then 3
               else 4
          end)

後でソート条件を追加することもできます (名前など)。

たとえば、各ケース内で年齢の降順で並べ替えるには、次のようにします。

order by (case when age is not null and birthday is not null and gender is not null then 1
               when age is not null and birthday is not null then 2
               when age is not null then 3
               else 4
          end),
         age desc
于 2012-07-10T15:16:31.023 に答える