营销部门希望首先关注来自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
根本不适合,因为我需要考虑所有客户,只确保加拿大和美国客户出现在列表的顶部。
此外,我不确定UNION
,AS
,EXCEPT
这样的陈述以及类似的内容,因为教程并没有那么深入。
答案 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