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 顺序进行数字排序。
任何想法都会有帮助......
听起来你正在追求这样的事情,那么:
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,因此任何时候只有其中一个会影响排序。