what about :
select (5-rownum/100) n_arrange,* from (select * from rbt order by Rbt_counter )

解决方案 »

  1.   

    select (5-trunc(rownum/100)) n_arrange,a.* from 
    (select * from rbt order by Rbt_counter)a
      

  2.   

    select (5-trunc(rownum/100)) n_arrange,a.* from 
    (select * from rbt order by Rbt_counter)a
      

  3.   

    这类问题根本就不是一个sql语句就能解决得了的,因为对每一行结果都需要一个分析计算的过程。
    可以用pl/sql解决。
    创建表:
    create table RBT
    (
      RBT_ID      NUMBER(6) primary key,
      RBT_COUNTER NUMBER(11) not null,
      RBT_NAME    VARCHAR2(50)
    )
    /
    创建索引
    create sequence RBT_SEQ
    minvalue 0
    maxvalue 999999
    start with 1020
    increment by 1
    cache 20;
    用一个匿名块插入所需测试数据:
    BEGIN
    FOR v_num IN 0..501 LOOP
    INSERT INTO rbt 
    VALUES(rbt_seq.nextval, 501-v_num, 'name' || lpad(rbt_seq.nextval, 6, '0'));
    END LOOP;

    commit;
    DBMS_OUTPUT.PUT_LINE('insert into rbt ' || 501 || ' records successfully!'); EXCEPTION
    WHEN OTHERS THEN
    NULL;
    END;
    /创建用于查询的存储过程:
    CREATE OR REPLACE PROCEDURE QUERY_RBT
    AS
    DECLARE
    v_count binary_integer;
    v_range binary_integer;
    v_rbt RBT%rowtype; CURSOR CUR_RBT IS
       SELECT RBT_ID,RBT_COUNTER,RBT_NAME
       FROM RBT;
    BEGIN
    OPEN CUR_RBT;
    FETCH CUR_RBT INTO v_rbt;

    IF (SQL%FOUND) THEN
       DBMS_OUTPUT.PUT_LINE('RBT_ID ' || 'RBT_COUNTER ' || 'RBT_NAME ' || 'n_arrange');
    ELSE
       DBMS_OUTPUT.PUT_LINE('record of table doesn''t exist!');
    END IF;
    WHEN SQL%FOUND DO LOOP
    SELECT COUNT(*)
    INTO v_count
    FROM RBT
    WHERE RBT_COUNTER > v_rbt.RBT_COUNTER; IF (v_count < 100) THEN
       v_range := 5;
    ELSIF (v_count < 200) THEN
       v_range := 4;
    ELSIF (v_count < 300) THEN
       v_range := 3;
    ELSIF (v_count < 400) THEN
       v_range := 2;
    ELSE
       v_range := 1;
    END IF; DBMS_OUTPUT.PUT_LINE(v_rbt.RBT_ID || ' ' || v_rbt.RBT_COUNTER || ' ' || v_rbt.RBT_NAME  || ' ' || v_range);

    FETCH CUR_RBT INTO v_rbt;
    END LOOP; EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(sqlcode || ',' || sqlerrm);
    RAISE;
    END QUERY_RBT;
    /
    接下来运行测试:
    SQL>set serveroutput on size 10000000
    SQL>exec query_rbt;
    下面的结果略去。
      

  4.   

    还有一种情况楼主未讲明,超过500的怎样?为0,还是可为负?那样,在jiezhi(浪子)的基础上稍改一下!
      

  5.   

    jiezhi(浪子)如果后面的关系不是均匀递增的,这个东西怎么写,比如
    1-50:n_arrange = 5
    51-120:n_arrange = 4
    121-250:n_arrange = 3
    251-500:n_arrange = 2
    501以下:n_arrange = 1因为我的库在mysql中,所以没法写存储过程,请问这个语句该怎么写