繁体   English   中英

基于表中的两列的Sql-排序

[英]Sql- ordering based on two columns in a table

考虑一个数据库

checkID record_number   data    Order_number
a                0        1        2
a                1        2        0
a                2        3        1
a                3        4        3

查找根据Order_number列获取记录的查询ieprocedure应返回数据:

having record _number 2 then
having record _number 0 then
having record _number 1 then
having record _number 3 

是否有任何加入或其他查询?

SELECT *
FROM tablename
ORDER BY CASE WHEN record_number = 2 THEN 0 ELSE 1 END, record_number;

SQL小提琴演示

这将按以下顺序为您提供数据:

| CHECKID | RECORD_NUMBER | DATA | ORDER_NUMBER |
-------------------------------------------------
|       a |             2 |    3 |            1 |
|       a |             0 |    1 |            2 |
|       a |             1 |    2 |            0 |
|       a |             3 |    4 |            3 |
select  *
from    YourTable
order by
        case record_number
        when 2 then 1
        when 0 then 2
        when 1 then 3
        when 3 then 4
        end

你可以在这种情况下使用CASE WHEN

SELECT  *
FROM    tbl
ORDER BY CASE record_number
              WHEN 2 THEN 1
              WHEN 0 THEN 2
              WHEN 1 THEN 3
              WHEN 3 THEN 4
              END

这是SQL Fiddle DEMO

| CHECKID | RECORD_NUMBER | DATA | ORDER_NUMBER |
-------------------------------------------------
|       a |             2 |    3 |            1 |
|       a |             0 |    1 |            2 |
|       a |             1 |    2 |            0 |
|       a |             3 |    4 |            3 |

最好的解决方案是创建用于排序检查的附加表,如下所示:

record_number   sort_seq
     2              1
     0              2
     1              3
     3              4

然后加入你的桌子

select c.* 
from check as c 
     join sortSeq as s on c.record_number=s.record_number 
order by s.sort_seq
SELECT *
FROM tablename
ORDER BY Order_number 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM