我正在使用mySQL。我必须按姓氏订购联系人姓名,但如果没有姓氏,我按名字排序。
这看起来像:
ORDER BY lastname = "", lastname, firstname
然而,这使得具有姓氏的那些显示在顶部。我喜欢的行为是混合第一个和最后一个名字,就像它们来自同一个领域一样。
示例(假装这些是名字):
A,T
Z,G
A
B
C
对战:
A
A,T
B
C
Z,G
由于
答案 0 :(得分:17)
答案 1 :(得分:8)
尝试使用Coalesce
注意:这将要求您不要使用空字符串存储空的姓氏(即“”)
ORDER BY Coalesce(LastName, FirstName)
在评论中建议通过再次将FirstName添加到订单依据列表,您将正确地命令具有相同lastName的两个人。这是一个例子。
ORDER BY Coalesce(LastName, FirstName), FirstName
答案 2 :(得分:3)
ORDER BY
支持自定义排序。但根据您的逻辑,我建议您使用SELECT
在CONCAT
中创建一个字段,然后在其上进行排序。
SELECT *, IF(LENGTH(lastname) = 0, firstname, CONCAT(lastname, ', ', firstname)) AS fullname
FROM contacts
ORDER BY fullname;
这样做的好处是可以根据相同的排序逻辑在结果中返回fullname
。
答案 3 :(得分:0)
ORDER BY
CASE
WHEN LName is null
THEN FName
ELSE LName
END
更多here