【问题标题】:Sort / Order by multiple column values in oracle, in a case specific way在 oracle 中按特定情况下的多个列值排序/排序
【发布时间】:2017-06-15 19:07:09
【问题描述】:

问题陈述:

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 和 Column1 对整个数据集进行排序。 例如,按 (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

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

提前感谢您的宝贵时间。

【问题讨论】:

  • 您好,欢迎来到论坛。您也应该提供您的尝试让我们查看,并解释它出了什么问题。这个网站不是供我们编写您的程序或查询的,但如果您的尝试由于某种原因不起作用,通常我们可以提供帮助。
  • 嗨@Hannu,我通过一种繁琐的方法(通过联合)达到了预期的结果。不知道如何以有效的方式做到这一点。即使我尝试了托尼提到的类似方法,但当时遇到了不同的问题。由于我不确定这些方法,我正在寻找其他想法。下次我也会发布尝试。谢谢。

标签: oracle


【解决方案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

【讨论】:

  • 嗨@Tony,它有效...你能给我一个提示吗,当我们使用 "when Column3 = 'Y' then 1 else 2 end" 以及它与 "then 1 else 0 end" 有何不同。
  • when 'Y' then 1 else 2 先下单 (1),再下单 (2)。 when 'Y' then 1 else 0 首先订购其他任何东西 (0),在 (1) 之后订购“Y”。因为 1 0
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 2021-02-15
  • 2011-09-13
  • 2020-11-05
  • 1970-01-01
  • 2012-10-15
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多