首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CASE语句按顺序处理数字

问用CASE语句按顺序处理数字
EN

Stack Overflow用户
提问于 2017-08-05 01:08:08
回答 1查看 178关注 0票数 0

按顺序编号,请参考选择列表中的列序号位置。因此,以下查询相当于按'C.custid,C.C.region‘排序:

代码语言:javascript
复制
SELECT
C.custid, C.region
FROM SALES.Customers AS C
ORDER BY  1, c.region

现在,如果我使用一个CASE语句,希望对region列中的NULL值进行最后排序,那么我将执行如下操作:

代码语言:javascript
复制
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

在这种情况下,数字不被视为列的序号位置,而是作为硬编码值来处理,这有助于更改排序顺序。

如果我的理解是正确的,为什么会有这种差异?背后的原因?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-05 02:03:49

如order by文档中所解释的那样

order_by_expression 指定对查询结果集进行排序的列或表达式。排序列可以指定为名称或列别名,或表示列在select列表中的位置的非负整数。

这里的键是非负整数,表示列的位置,而不是表达式。

表达式可以用于排序,但是如果它偶尔选择一个列,如果表达式值在select列表中的列数之内,您不会感到惊讶吗?

在解析语句时,数据库需要明确区分位置列或要排序的表达式,例如Checksum( HatSize )。本例中的规则是,整数常量按位置指定列,任何其他表达式,无论数据类型如何,例如列名或Len( Name ),都指定要排序的值。

还请注意:

最佳实践 避免将ORDER子句中的整数指定为select列表中列的位置表示形式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45517274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档