排序后分配行号

13 浏览
0 Comments

排序后分配行号

排序后,如何为我的代码分配行号?\n我已经使用了ROWNUM,但结果不是按照 4,3,2,1,8,7,5,6 这样的顺序排列。\n

ROWNUM C0   M     SS 
------ --- ----- -----                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
  4    a   ace    11                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  3    a   abe     7                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  2    a   abd     3                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  1    a   a__    21                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  8    b   ace    11                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  7    b   abe     7                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  6    b   abd     3                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  5    b   a__    21 

\n我的代码:\n

CREATE TABLE T4 (
C0 VARCHAR2(10),
C1 VARCHAR2(10),
C2 NUMBER
);
INSERT INTO T4  VALUES ('a','abd',1);
INSERT INTO T4  VALUES ('a','abd',2);
INSERT INTO T4  VALUES ('a','abe',3);
INSERT INTO T4  VALUES ('a','abe',4);
INSERT INTO T4  VALUES ('a','ace',5);
INSERT INTO T4  VALUES ('a','ace',6);
INSERT INTO T4  VALUES ('b','abd',1);
INSERT INTO T4  VALUES ('b','abd',2);
INSERT INTO T4  VALUES ('b','abe',3);
INSERT INTO T4  VALUES ('b','abe',4);
INSERT INTO T4  VALUES ('b','ace',5);
INSERT INTO T4  VALUES ('b','ace',6);
SELECT ROWNUM,rr.C0,rr.M, rr.ss -- 如何修改以获取1,2,3,4,5,6,7,..
FROM
(
SELECT C0,C1 M, SUM(C2) ss FROM T4  GROUP BY C0, C1
UNION
SELECT C0,SUBSTR(C1,1,1)||'__'  , SUM(C2) ss FROM T4  GROUP BY C0,SUBSTR(C1,1,1)) rr
ORDER BY rr.C0,rr.M DESC;

0
0 Comments

在进行排序后,需要为每一行分配一个行号。然而,有时在排序后分配行号时会出现问题。本文将讨论出现这个问题的原因以及解决方法。

问题的原因是在排序后分配行号时,需要将rownum移出查询语句。在查询语句中,我们可以使用rownum来为每一行分配一个唯一的行号。然而,在排序后的查询中,rownum的值会在排序之前被分配,这会导致行号分配错误。

为了解决这个问题,我们可以将rownum移出查询语句,并将其放在子查询中。具体的解决方法如下所示:

select rownum, r.* from (
... your query with order by
) r

在这个解决方法中,我们首先将原始查询语句放在一个子查询中,并在子查询的末尾使用order by进行排序。然后,我们在外部查询中使用rownum来为排序后的结果集分配行号。通过这种方式,我们可以确保在排序后分配正确的行号。

总结起来,当在排序后需要为每一行分配行号时,我们需要将rownum移出查询语句,并在子查询中进行排序。这样可以避免在排序前分配行号导致的错误。希望本文对解决这个问题有所帮助。

0