ORDER BY + IN声明?

use*_*072 1 sql sql-order-by sql-in

营销部门希望首先关注来自Noth America的客户.获取所有客户的ID,姓氏和国家/地区.通过首先培养居住在加拿大和美国的客户来建立清单,最后通过ID订购.提示:在ORDER BY子句中使用IN表达式.

我已经尝试过很多次了

SELECT CustomerID, LastName, Country
FROM Customer
ORDER BY Country IN ('Canada', 'USA'), CustomerID
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,因为它按照它们出现在原始表中的顺序(也按ID排序)获取所有客户的指定字段,即使我CustomerID从该ORDER BY条款中删除,不关心他们在哪个国家/地区属于.

我该怎么办?我是SQL新手,并不知道如何解决这个问题.

编辑:WHERE根本不适合,因为我需要考虑所有客户,只确保加拿大和美国的客户出现在列表的顶部.另外我不确定之类的语句UNION,AS,EXCEPT并使用类似的东西,是为了,因为教程没去深了.

Tho*_*ner 5

并非每个DBMS都具有布尔数据类型.所以结果

Country IN ('Canada', 'USA'), 
Run Code Online (Sandbox Code Playgroud)

这是一个布尔值,无法在这些DBMS中进行排序.

CASE但是,您可以使用表达式来指定值:

SELECT CustomerID, LastName, Country
FROM Customer
ORDER BY CASE WHEN Country IN ('Canada', 'USA') THEN 1 ELSE 2 END, CustomerID;
Run Code Online (Sandbox Code Playgroud)