sql - order by 后跟从属 order by

标签 sql sql-server tsql

我有一个表格,其中包含如下所示的部分数据。我已经在 edition_id 上完成了订购。 现在还需要订购 laungauge_id,这取决于 edition_id 的值。

  • Edition_id 是指报纸所在的城市。
  • Language_id 是指报纸所使用的不同语言 已发布。

所以假设 edition_id = 5 表示新德里。
对于新德里,language_id 为 13(英语)、5(印地语)、1(泰卢固语)、4(乌尔都语)。

我想要为新德里显示,首先显示所有英文文章,然后是印地语,然后是泰卢固语,然后是乌尔都语。

If edition_id=1 then order of language_id should be 13,1,2.

同样,

If edition_id=5 then order of language_id should be 13,5,1,4

我现在拥有的是

Edition_id | Language_id
1             1
1             2
1             13
1             1
1             13 
1             2
5             4
5             1
5             1
5             4
5             13
5             5
5             13 

需要什么

Edition_id | Language_id
1             13
1             13
1             1
1             1
1             2 
1             2
5             13
5             13
5             5
5             1
5             1
5             4
5             4

如何做到这一点?请帮忙。

有这种可能吗

Select * from <table>
order by edition_id ,
            case when edition=6 then <order specified for language_id ie 13,5,1,4>

最佳答案

我会创建一个补充排名表。然后我会加入以提供您的排序顺序。例如:

EDITION_SORT_ORDER

EDITION_ID  LANGUAGE_ID  RANK
----------  -----------  ----
1           13           1
1           1            2
1           2            3
5           13           1
5           5            2
5           1            3
5           4            4

在查询中使用此表可能如下所示:

SELECT E.EDITION_ID, E.LANGUAGE_ID
FROM <TABLE> E LEFT OUTER JOIN EDITION_SORT_ORDER S ON
  E.EDITION_ID = S.EDITION_ID AND
  E.LANGUAGE_ID = S.LANGUAGE_ID
ORDER BY S.RANK

这样你以后可以添加其他规则,而且不会造成 CASE 逻辑的困惑。

或者,如果您想避免 JOIN,您可以创建一个存储函数,该函数执行类似的查找并返回一个排名(基于传递的 EDITION_ID 和 LANGUAGE_ID 参数)。

如果您必须使用 CASE,那么我会将其限制为一个函数,以便您可以在其他地方重用逻辑。

关于sql - order by 后跟从属 order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14010120/

相关文章:

c# - 在 SQL Server 中保存时,是否可以保留 C# 十进制类型的原始尾随零?

sql-server - 如何在 SQL Server Management Studio 中备份连接

sql - NOT IN with Nulls - 不明确的行为

sql-server - LIKE 模式 T-SQL

java - 创建 hibernate native 查询时出现查询语法异常

c# - 如何使用 Entity Framework 根据最大版本选择多条记录

java - 使用 EntityManager 执行 SQL 命令

sql-server - 将字段设置为来自另一个表的随机值

sql - 按别名分组

mysql - 在 MySQL 中的存储过程中使用变量