2016-07-25 3 views
3

わかりやすいタイトルが付いてくるのは難しいので、私が望むものを表現するためのより良い方法は、例を挙げていると思います。それははっきりしていない場合、それは両方の名前で発注する必要があり2つのvarcharカラムによるMySQLの注文

NAME | EMAIL 
NULL | [email protected] 
Bill | [email protected] 
John | [email protected] 
Mike | [email protected] 

と:私は結果がなるようにクエリを注文したい

NAME | EMAIL 
John | [email protected] 
Mike | [email protected] 
NULL | [email protected] 
Bill | [email protected] 

:のは、私は次を持つテーブルがあるとしましょうNAME列にその行のエントリがない場合は両方の優先順位を混在させます。したがって、NAMEがNULLの場合は、EMAILの値を使用してその行を他の行とソートしますが、NAMEがNULLでない場合はNAMEを使用し、EMAILはソートしません。

あなたが推測できるとおり、ORDER BY name ASC, email ASCはこのトリックを行いません。私はこれをGoogleにどのようにしているのか分からないので、私はSOに目を向ける。前もって感謝します。

答えて

0
SELECT * 
FROM yourtable 
ORDER BY CASE 
      WHEN name IS NULL THEN email 
      ELSE name 
      end, 
      email 

http://sqlfiddle.com/#!9/0f48ec/2

+0

多くの回答がありましたが、これが私が見た最初のものです私がやり遂げたこととマッチしました(私は参加するためにいくつかのロジックを追加しましたが、ええ)。 – Orlando

+0

まあ、他の人は慎重に読んでいない:)あなたの例に基づいて、ほとんどの答えはすべてのNULLが上に行くと仮定していましたが、あなたが必要とするものではないことははっきりしていました。 –

0

の式をORDER BYに使用してください。

QUERY

SELECT* FROM your_table_name 
ORDER BY CASE WHEN NAME IS NULL THEN 0 ELSE 1 END, NAME, EMAIL; 
0
select name, email 
from my_table 
ORDER BY name IS NULL DESC, NAME ASC, EMAIL ASC 
+0

こんにちは、あなたは私を説明してくださいだろうか? 'order by'の' NAME'と 'EMAIL'だけで同じ結果を得られませんか? –

+0

@MridulKashyapあなたが使用していない場合は、null値は末尾に配置されます。sintaxの意味はnullです。次に他は – scaisEdge

+0

"ORDER BYを実行すると、ORDERを実行するとNULL値が最初に表示されますBY ... ASCそして最後にORDER BY ... DESCをするならば。 "この[mysqlリファレンス](http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html)を確認してください。私たちは名前と電子メールを昇順で必要とするので、本当に "IS NULL"を入れる必要がありますか? –

2

一つの方法は、並べ替えのために列を追加することです:

SELECT 
    NAME, 
    EMAIL, 
    IFNULL(NAME, EMAIL) AS sort_column 
FROM 
    mytable 
ORDER BY 
    sort_column 
0
SELECT TOP 1000 [Name] 
     ,[email] 
    FROM [db1].[dbo].[emailTB] order by 
    CASE WHEN Name !='NULL' THEN [Name] else NULL end ,email 

それは私のために働きました! `NULL`条件が必要であることを利用し、なぜ

関連する問題