这是我的表格
|users|
|id| |lastname1| |lastname2| |name| |company_name|
1 Messi Ramirez Lionel
2 Gates Bush Bill
3 Klose Kazer Miroslav
4 Ozil Demon Mezut
5 Facebook
6 GMAIL
7 MYSPACE
8 Twitter
我试图像lastname1那样订购company_name。
有些朋友给了我这个code但是没有使用空值来处理NULL值:
select * from users
order by COALESCE(lastname1,company_name),lastname2,name ASC;
我应该有这个答案
注意:" facebook"的第一个字母是F和"盖茨"是G所以它继续下一个字母。
5 Facebook
2 Gates Bush Bill
6 GMAIL
3 Klose Kazer Miroslav
1 Messi Ramirez Lionel
7 MYSPACE
4 Ozil Demon Mezut
8 Twitter
请有人帮助我吗?
答案 0 :(得分:1)
使用coalesce()
:
order by coalesce(lastname1, company_name)
我不确定其他专栏对order by
有什么影响,所以我将其删除了。
编辑:
如果值为空或空格而不是NULL,则使用case
:
order by (case when trim(lastname1) = '' or lastname1 is null then company_name
else lastname1
end)
答案 1 :(得分:1)
您可以使用此查询执行此操作:
select * from users
order by COALESCE(lastname1,company_name),lastname2,name ASC;
COALESCE获取它的第一个非null元素列表。
如果在修改后的问题中,空字符串应该被认为是NULL,则可以使用
执行此操作select * from users
order by
CASE
WHEN TRIM(lastname1) = '' THEN company_name
WHEN lastname1 IS NULL THEN company_name
ELSE lastname1
END;