sql - 按大小写排序
问题描述
我有一个需要排序的主题表 - 如果主题是核心主题,那么它需要排在第一位(按 SortOrder 排序),如果它不是核心主题,则需要按字母顺序排序。
我用示例表设置了一个小提琴:http ://sqlfiddle.com/#!18/4b80eb/1
我试过的代码是:
SELECT * FROM subject
ORDER BY CASE
WHEN IsCore=1 THEN SortOrder
ELSE [Description]
END
我收到此错误“将 varchar 值 'Science' 转换为数据类型 int 时转换失败。”。
我希望按以下顺序获得主题:
- 数学
- 阅读
- 写作
- 艺术
- 计算
- 科学
有人可以建议我应该如何做吗?
解决方案
CASE
表达式返回一个标量值,并使用数据类型优先级来确定返回类型。显然SortOrder
是int
,因此具有比数据类型更高的数据类型优先varchar
级Description
。因此,您需要使用一些表达式。我假设您想要IsCore = 1
首先具有的行,然后按 排序SortOrder
,然后使用 column Description
。
ORDER BY CASE WHEN IsCore = 1 THEN 0 ELSE 1 END,
CASE WHEN IsCore = 1 THEN SortOrder END,
Description;
推荐阅读
- java - 在 linux 机器上运行时,Click 在 firefox headless 中不起作用
- node.js - 每当我更改 Firebase Typescript 项目中的文件时,如何自动重启 VSCode 调试器?
- android - 为什么小尺寸图像视图不与约束布局内的大图像视图重叠?
- css - Unicode emoji 字母间距问题
- json - 将 JSON 解析为 Json 对象时出现异常
- typescript - 带有 Rest Operator 绑定元素 x 的 TypeScript 隐式具有“任何”类型
- css - CSS 没有按预期覆盖 React-Bootstrap 和 Bootstrap
- sed - 使用正则表达式 (REGEX) 从coverage.py 中获取总覆盖率的值
- stored-procedures - 防止在返回错误时调用存储过程的任务 T1 触发任务 T2
- python - 使用pafy时设置某个位置