1

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

我试过很多次

SELECT CustomerID, LastName, Country
FROM Customer
ORDER BY Country IN ('Canada', 'USA'), CustomerID

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

我应该怎么办?我对 SQL 很陌生,不知道如何解决这个问题。

编辑:WHERE根本不适合,因为我需要考虑所有客户,只确保加拿大和美国的客户出现在列表的顶部。此外,我不确定要使用诸如UNION,之类的语句,因为本教程还没有深入。ASEXCEPT

4

3 回答 3

5

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

Country IN ('Canada', 'USA'), 

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

但是,您可以使用CASE表达式来分配值:

SELECT CustomerID, LastName, Country
FROM Customer
ORDER BY CASE WHEN Country IN ('Canada', 'USA') THEN 1 ELSE 2 END, CustomerID;
于 2016-06-15T09:55:51.720 回答
0

SELECT CustomerID, LastName, Country FROM Customer ORDER BY Country IN ('Canada', 'USA') desc, CustomerID asc

于 2018-07-20T01:41:16.447 回答
-1

IN 表达式不返回值,因此您无法排序

您可以尝试:

SELECT CustomerID, LastName, Country
FROM Customer
WHERE Country='Canada'

UNION ALL

SELECT CustomerID, LastName, Country
FROM Customer
WHERE Country='USA'
ORDER BY CustomerID

将 ORDER BY 与 UNION、EXCEPT 和 INTERSECT 一起使用 当查询使用 UNION、EXCEPT 或 INTERSECT 运算符时,必须在语句末尾指定 ORDER BY 子句,并对组合查询的结果进行排序。下面的示例返回所有红色或黄色的产品,并按 ListPrice 列对该组合列表进行排序。 https://msdn.microsoft.com/en-us/library/ms188385.aspx#Union

于 2016-06-15T09:29:38.700 回答