首页 > 解决方案 > 按大小写排序

问题描述

我有一个需要排序的主题表 - 如果主题是核心主题,那么它需要排在第一位(按 SortOrder 排序),如果它不是核心主题,则需要按字母顺序排序。

我用示例表设置了一个小提琴:http ://sqlfiddle.com/#!18/4b80eb/1

我试过的代码是:

SELECT * FROM subject
ORDER BY CASE
    WHEN IsCore=1 THEN SortOrder
    ELSE [Description]
    END

我收到此错误“将 varchar 值 'Science' 转换为数据类型 int 时转换失败。”。

我希望按以下顺序获得主题:

有人可以建议我应该如何做吗?

标签: sqlsql-server

解决方案


CASE表达式返回一个标量值,并使用数据类型优先级来确定返回类型。显然SortOrderint,因此具有比数据类型更高的数据类型优先varcharDescription。因此,您需要使用一些表达式。我假设您想要IsCore = 1首先具有的行,然后按 排序SortOrder,然后使用 column Description

ORDER BY CASE WHEN IsCore = 1 THEN 0 ELSE 1 END,
         CASE WHEN IsCore = 1 THEN SortOrder END,
         Description;

推荐阅读