棘手的sql订购

时间:2017-10-03 16:05:27

标签: sql select oracle11g sql-order-by

我有一张关于oracle 11g的表,看起来像这样

col_1 |   col_2   |  col_3 |
1     | 111222001 |   A
2     | 111222001 |   B
3     | 111222002 |   A
4     | 111222002 |   B
5     | 111555001 |   B
6     | 111555003 |   A
7     | 111555003 |   B

我想订购它,以获得此

col_1 |   col_2   |  col_3 |
2     | 111222001 |   B
4     | 111222002 |   B
1     | 111222001 |   A
3     | 111222002 |   A
5     | 111555001 |   B
7     | 111555003 |   B
6     | 111555003 |   A

背后的逻辑:

注意col_2值是三个三元组111-222-333的值。

我想根据第三个三元组111-222-“333”来命令col_2,并且只获得首先具有col_3 ='B'的条目,然后获得具有col_3 ='A'的条目。 当第二个三元组(改变/上升)111-“222”-333时,我们重做之前描述的内容。

在此先感谢,我确实有办法做到这一点,但如果有人能找到一种方法可以做到这一点,那真的很难看

2 个答案:

答案 0 :(得分:0)

Select * 
from table
order by col_3 desc, col2, col1;

答案 1 :(得分:0)

我不知道为什么我没有看到它,但这很简单,抱歉让你烦恼

从table_name中选择col_1,col_2,col_3 按substr(col_2,3,8),col_3,substr(col_2,9,11);

排序