按特定情况下的oracle中的多个列值排序/排序

时间:2017-01-30 15:03:10

标签: oracle

问题陈述:

Column1 | Column2 | Column3 | Column4 | Column5
------------------------------------------------------------------------
1      |22           |Y     |Null     |Null
2      |21           |Null  |Y        |Null
31     |12           |N     |Y        |Null
12     |24           |Null  |Null     |Y
12     |52           |Y     |Null     |N
14     |26           |N     |N        |Y
51     |72           |Y     |Null     |Null
65     |32           |N     |N        |Null
67     |76           |N     |Null     |Null
23     |23           |N     |N        |Null
43     |22           |N     |Null     |Null

Column2只是一个数据字段。不依赖于此。但是我需要按Column3,Column4,Column5&amp ;;来排序整个数据集。第1列。 例如,Order By(Column3,Column4,Column5,Column1)DESC或ASC。 Column3中的所有'Y'应首先出现,然后是column4的'Y',然后是column5的'Y',其余记录可以按Column1值排序。

预期结果:

Column1 | Column2 | Column3 | Column4 | Column5
------------------------------------------------------------------------
1      |22           |Y     |Null     |Null
12     |52           |Y     |Null     |N
51     |72           |Y     |Null     |Null
2      |21           |Null  |Y        |Null
31     |12           |N     |Y        |Null
12     |24           |Null  |Null     |Y
14     |26           |N     |N        |Y
23     |23           |N     |N        |Null
43     |22           |N     |Null     |Null
65     |32           |N     |N        |Null
67     |76           |N     |Null     |Null

不想使用任何联合类型的东西。任何想法,如何在甲骨文中做到这一点?

提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

order by case when Column3 = 'Y' then 1 else 2 end,
         case when Column4 = 'Y' then 1 else 2 end,
         case when Column5 = 'Y' then 1 else 2 end,
         Column1