ORDER BY + IN语句?

时间:2016-06-15 09:18:10

标签: 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

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

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

编辑:WHERE根本不适合,因为我需要考虑所有客户,只确保加拿大和美国客户出现在列表的顶部。 此外,我不确定UNIONASEXCEPT这样的陈述以及类似的内容,因为教程并没有那么深入。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

选择客户ID,姓氏,国家/地区 来自客户 按国家/地区(“加拿大”,“美国”)desc,客户ID升序

答案 2 :(得分:-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子句必须是   在声明的最后指定和结合的结果   查询已排序。以下示例返回所有产品   是红色或黄色,并按列对此组合列表进行排序   价格表。   https://msdn.microsoft.com/en-us/library/ms188385.aspx#Union