首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSSQL -在ORDER子句中的CASE语句是否返回列序号?

MSSQL -在ORDER子句中的CASE语句是否返回列序号?
EN

Stack Overflow用户
提问于 2017-01-31 17:54:56
回答 4查看 482关注 0票数 3

我在这里遇到了一个建议(SQL: ORDER BY using a substring within a specific column... possible?),它显示了一个CASE语句,它在一个包含4列的表中返回ORDER子句中的整数。

代码语言:javascript
运行
复制
SELECT npID, title, URL, issue
FROM   tbl
ORDER  BY substring(issue, 1, 4) DESC
      ,CASE 
          WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter')  THEN 1
          WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
          WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter')  THEN 3
          WHEN substring(issue, 6, 100) IN ('Fall',  'Fourth Quarter') THEN 4
          ELSE 5 
       END;

我不明白这是如何运作的。显然,从大小写中得到的整数不是列序数(例如,其他5,因为表只有4列)。但是他们的意思是什么呢?(然而,文章中给出的例子很管用,所以我真的很困惑。)有人能解释一下在ORDER子句中在CASE语句中返回整数意味着什么吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-01 16:09:55

ORDER BY子句中唯一一项被认为是序数的情况是,当它是整数字面时,看看SQL92标准,我们可以看到它的起源:

如果a包含a,则该值应大于0而不大于T的度数。

如果ORDER BY子句包含一个非常量标量表达式(如CASE ),则该表达式的结果被用作排序键,也就是说,如果它计算结果集中的一行并返回整数n,则它是排序的n的值。

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 18:05:08

这些整数不是列序数,而是值文本。该查询首先按照issue列的前四个字符(代表年份)进行排序。然后,根据case表达式表示的第二个键对它们进行排序。在那里使用的值本身并不有趣,只有它们之间的相对顺序是重要的。例如,计算夏季问题的2没有任何意义--只有在冬天之后(计算为1)和春天之前(计算为3)。查询可以使用'a‘、'b’、'c‘、'd’和'e‘,并得到完全相同的结果。

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 17:59:47

CASE语句中的整数值不是列序数,而是将用于排序结果的静态整数值。

在通过substring(issue, 1, 4) DESC订购记录之后,

substring(issue, 6, 100)'Winter''First_Quarter'时,首先对其进行排序,

substring(issue, 6, 100)'Summer''Second_Quarter'时,它将按'Winter''First_Quarter'排序。

以此类推。

为了更好地理解,您可以选择案例并查看结果。

代码语言:javascript
运行
复制
SELECT npID, title, URL, issue,CASE 
          WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter')  THEN 1
          WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
          WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter')  THEN 3
          WHEN substring(issue, 6, 100) IN ('Fall',  'Fourth Quarter') THEN 4
          ELSE 5 
       END
FROM   tbl
ORDER  BY substring(issue, 1, 4) DESC
      ,CASE 
          WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter')  THEN 1
          WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
          WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter')  THEN 3
          WHEN substring(issue, 6, 100) IN ('Fall',  'Fourth Quarter') THEN 4
          ELSE 5 
       END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41964316

复制
相关文章

相似问题

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