ORDER BY中的数字引用SELECT列表中的列序数位置。 所以下面的查询是等同于“C.custid,C.region”排序:使用CASE语句处理ORDER BY中的数字
SELECT
C.custid, C.region
FROM SALES.Customers AS C
ORDER BY 1, c.region
现在,如果我使用一个CASE语句这样的,我想在地区列中的NULL值的最后排序,那么我会做这样的事情:
SELECT
C.custid, C.region
FROM SALES.Customers AS C
ORDER BY CASE WHEN C.region IS NULL THEN 1 ELSE 0 END, C.region
在这种情况下,数字被视为列不是顺序位置,但帮助改变排列顺序为硬编码值。
如果我的理解是正确的,为什么这种差异?它背后的原因?
由于
在第一种情况下,将'1'视为值是没有意义的,因为它总是相同的,而case语句可能返回不同的值 – FuzzyTree