Oracle - 根据字符串和数字条件排序

Lan*_*tis 2 sorting oracle dynamic

我有一个查询,其中基于列值,我的排序将是动态的。所以,它是这样的:

ROW_NUMBER() OVER (PARTITION BY last_action 
                   ORDER BY CASE
                              WHEN last_action = 'Insert' THEN company_name
                              ELSE percent_change
                            END DESC
Run Code Online (Sandbox Code Playgroud)

这里的问题是它们是不同的数据类型,因此会引发错误。如果我将“percent_change”转换为字符,那么它不会按数字排序。而且,让事情变得复杂的是,他们想要 DESC 中的“percent_change”和 ASC 中的“company_name”。

所以,我在想是否有一种方法可以将实际的“company_name”转换为某个数值,然后从 0 中减去它,然后我可以按 DESC 顺序进行数字排序。

任何想法都会有帮助......

Bon*_*ist 6

听起来你正在追求这样的事情,那么:

ROW_NUMBER() OVER (PARTITION BY last_action 
                   ORDER BY CASE
                              WHEN last_action = 'Insert' THEN company_name
                            END,
                            CASE
                              WHEN last_action = 'Insert' THEN NULL
                              ELSE percent_change
                            END DESC NULLS LAST)
Run Code Online (Sandbox Code Playgroud)

这是通过将排序分为两个表达式来实现的,但由于它们以子句中的列为条件partition by,因此任何时候只有其中一个会影响排序。