我在提出描述性标题方面遇到了麻烦,因此我认为更好的方式来表达我想要的是一个例子。我们假设我有一张包含以下内容的表格:
NAME | EMAIL
John | john@example.com
Mike | mike@example.com
NULL | albert@example.com
Bill | zebra_bill@example.com
我想订购查询,结果将是:
NAME | EMAIL
NULL | albert@example.com
Bill | zebra_nill@example.com
John | john@example.com
Mike | mike@example.com
如果不清楚,则应该通过名称和电子邮件进行排序,当NAME列没有该行的条目时,将两个优先级混合在一起。因此,如果NAME为NULL,它使用EMAIL中的值相对于其他行对该行进行排序,但如果NAME不是NULL,则它使用NAME而不是EMAIL进行排序。
正如你猜测的那样,ORDER BY name ASC, email ASC
并不能解决问题。我不确定如何谷歌这个,所以我转向SO。提前谢谢。
答案 0 :(得分:2)
一种方法是添加一个列进行排序:
SELECT
NAME,
EMAIL,
IFNULL(NAME, EMAIL) AS sort_column
FROM
mytable
ORDER BY
sort_column
答案 1 :(得分:0)
在CASE
中使用ORDER BY
表达式。
<强> QUERY 强>
SELECT* FROM your_table_name
ORDER BY CASE WHEN NAME IS NULL THEN 0 ELSE 1 END, NAME, EMAIL;
答案 2 :(得分:0)
select name, email
from my_table
ORDER BY name IS NULL DESC, NAME ASC, EMAIL ASC
答案 3 :(得分:0)
SELECT TOP 1000 [Name]
,[email]
FROM [db1].[dbo].[emailTB] order by
CASE WHEN Name !='NULL' THEN [Name] else NULL end ,email
它对我有用!
答案 4 :(得分:0)
SELECT *
FROM yourtable
ORDER BY CASE
WHEN name IS NULL THEN email
ELSE name
end,
email