MSSQL - ORDER BY 子句中的 CASE 语句 return 列序数?
MSSQL - does a CASE statement in an ORDER BY clause return column ordinals?
我 运行 在此 (SQL: ORDER BY using a substring within a specific column... possible?) 中提出了一个建议,该建议显示了一个 CASE 语句 return 在具有 4 列的 table 的 ORDER BY 子句中输入整数。
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;
我不明白这是怎么回事。显然,从 CASE 得到的整数不是列序数(例如,ELSE 5,因为 table 只有 4 列)。但它们是什么意思? -- 上下文使它们看起来好像要用于 THEMSELVES 进行订购,但我从未在 ORDER BY 中看到过这种情况。 (但是,post 中给出的示例有效,所以我真的很困惑。)有人可以解释一下 ORDER BY 子句中 CASE 语句中 return 整数的含义吗?谢谢。
CASE
语句中存在的整数值不是列序数,它们是将用于对结果排序的静态整数值。
按 substring(issue, 1, 4) DESC
、
对记录进行排序后
当substring(issue, 6, 100)
为'Winter'
或'First_Quarter'
则优先排序,
当 substring(issue, 6, 100)
为 'Summer'
或 'Second_Quarter'
时,它将排在 'Winter'
或 'First_Quarter'
之后
等等..
为了更好地理解您可以select案例并查看结果
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;
does a CASE statement in an ORDER BY clause return column ordinals?
没有
以下语句仅更改值在该列中出现的顺序
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;*emphasized text*
这些整数不是列序数,而是值文字。查询首先按 issue
列(代表年份)的前四个字符排序。然后,它们根据 case
表达式表示的辅助键进行排序。那里使用的值本身并不有趣,只有它们之间的相对顺序很重要。例如,为夏季问题计算的 2
没有任何意义 - 只是它出现在冬季之后(计算为 1)和 spring 之前(计算为 3)。查询可以使用 'a'、'b'、'c'、'd' 和 'e' 来代替并得到完全相同的结果。
唯一一次 ORDER BY
子句中的项目被认为是序数是当它是整数文字时,查看 sql-92 标准我们可以看到这个的起源:
If a <sort specification> contains an <unsigned integer>, then the
<unsigned integer> shall be greater than 0 and not greater than the
degree of T. The <sort specification> identifies the column of T with
the ordinal position specified by the <unsigned integer>.
如果 ORDER BY
子句包含 non-constant 标量表达式,例如 CASE
,则该表达式的结果将用作排序键,即如果它计算结果集和 returns 一个整数 n 它是排序所依据的 n 的值。
我 运行 在此 (SQL: ORDER BY using a substring within a specific column... possible?) 中提出了一个建议,该建议显示了一个 CASE 语句 return 在具有 4 列的 table 的 ORDER BY 子句中输入整数。
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;
我不明白这是怎么回事。显然,从 CASE 得到的整数不是列序数(例如,ELSE 5,因为 table 只有 4 列)。但它们是什么意思? -- 上下文使它们看起来好像要用于 THEMSELVES 进行订购,但我从未在 ORDER BY 中看到过这种情况。 (但是,post 中给出的示例有效,所以我真的很困惑。)有人可以解释一下 ORDER BY 子句中 CASE 语句中 return 整数的含义吗?谢谢。
CASE
语句中存在的整数值不是列序数,它们是将用于对结果排序的静态整数值。
按 substring(issue, 1, 4) DESC
、
当substring(issue, 6, 100)
为'Winter'
或'First_Quarter'
则优先排序,
当 substring(issue, 6, 100)
为 'Summer'
或 'Second_Quarter'
时,它将排在 'Winter'
或 'First_Quarter'
等等..
为了更好地理解您可以select案例并查看结果
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;
does a CASE statement in an ORDER BY clause return column ordinals?
没有
以下语句仅更改值在该列中出现的顺序
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;*emphasized text*
这些整数不是列序数,而是值文字。查询首先按 issue
列(代表年份)的前四个字符排序。然后,它们根据 case
表达式表示的辅助键进行排序。那里使用的值本身并不有趣,只有它们之间的相对顺序很重要。例如,为夏季问题计算的 2
没有任何意义 - 只是它出现在冬季之后(计算为 1)和 spring 之前(计算为 3)。查询可以使用 'a'、'b'、'c'、'd' 和 'e' 来代替并得到完全相同的结果。
唯一一次 ORDER BY
子句中的项目被认为是序数是当它是整数文字时,查看 sql-92 标准我们可以看到这个的起源:
If a <sort specification> contains an <unsigned integer>, then the <unsigned integer> shall be greater than 0 and not greater than the degree of T. The <sort specification> identifies the column of T with the ordinal position specified by the <unsigned integer>.
如果 ORDER BY
子句包含 non-constant 标量表达式,例如 CASE
,则该表达式的结果将用作排序键,即如果它计算结果集和 returns 一个整数 n 它是排序所依据的 n 的值。