我有一个简单的MySQL选择,我想按公司名称和名字订购。表格的列是:
COMPANY_NAME
FIRST_NAME
LAST_NAME
当我使用标准ORDER BY运行select时,我得到以下内容:
SELECT COMPANY_NAME, FIRST_NAME, LAST_NAME
from TABLE_contacts
WHERE CONTACT_STATUS = 'ACTIVE'
ORDER BY COMPANY_NAME, FIRST_NAME;
+------------------+------------+-----------+
| COMPANY_NAME | FIRST_NAME | LAST_NAME |
+------------------+------------+-----------+
| | Bob | Jones |
| | Mark | Doe |
| Acme Company | Joan | Todd |
| Fun Company | | |
+------------------+------------+-----------+
但是,我需要列表按字母顺序排列。有些情况下公司名称为空或名字将为空。我的目标是使用公司名称按字母顺序列出(如果存在),如果不是这样的输出,则按名字列出:
+------------------+------------+-----------+
| COMPANY_NAME | FIRST_NAME | LAST_NAME |
+------------------+------------+-----------+
| Acme Company | Joan | Todd |
| | Bob | Jones |
| Fun Company | | |
| | Mark | Doe |
+------------------+------------+-----------+
我已尝试过以下声明但我的结果是一样的:
SELECT COMPANY_NAME, FIRST_NAME, LAST_NAME
from TABLE_contacts
WHERE CONTACT_STATUS='ACTIVE'
ORDER BY CASE WHEN COMPANY_NAME IS NULL THEN FIRST_NAME ELSE COMPANY_NAME END DESC;
感谢您的帮助!
答案 0 :(得分:0)
我想你想要:
order by coalesce(Company_Name, First_Name)
但是,这假设Company_Name
是NULL
而不是空白。您可能需要扩展逻辑:
order by (case when Company_Name is not null and Company_Name <> ''
then Company_Name
else First_Name
end)
我不确定你的例子中desc
是什么。您希望的结果按升序排列。