感谢您是否可以帮助我解决我在Oracle
(pl / sql)上工作的案例。
假设我有一个名为TableA的表:TableA
TableA
排序规则是:
CASE_ID
&无论CONTRACT
如何,都必须将SCORE
与'SD'TRIGGER放在首位。CONTRACT
&带有'SD'TRIGGER的CASE_ID
位于顶部,下一个CASE_ID&合同按SCORE降序排序。 我想为1 CASE_ID
放置1个唯一编号,从1开始递增,因此使用相同CASE_ID
的合同将具有相同的编号。我想要获得的解决方案的示例是:Example Solution
我尝试使用以下查询DENSE_RANK
:
select a.*
,dense_rank() over (partition by a.case_id order by rn)
from (
select a.*,rownum as rn from TableA a
)a
但解决方案仍然不是我想要的方式,有一些CASE_ID
分配了相同的NUMBER
感谢您能否就此提供一些意见。
非常感谢!
答案 0 :(得分:1)
带分区的密集排名只会给你一个分区中的连续排名。要在没有分区的情况下使用dense_rank,请参阅 Gordon的答案。
另一种方法是在不同的case_id上创建row_number并连接回原始表;
SELECT TableA.* , bar.NUMBER
FROM TableA
JOIN
(SELECT foo.CASE_ID as case_id, ROW_NUMBER() OVER (Partition by 1) as NUMBER
FROM ((SELECT DISTINCT CASE_ID FROM TableA)as foo) as bar
ON TableA.CASE_ID = bar.case_id ;
答案 1 :(得分:1)
您可以使用dense_rank()
。它看起来像:
select a.*,
dense_rank() over (order by a.case_id)
from TableA a;
不需要partition by
。