即:显示原表列A替换后四位为A1,分组之后所在该组记录数50%的例
不是很明白你的意思:select *,substr(a,Length(A) - 4,4)||'0000' FROM table1

解决方案 »

  1.   

    就是一个替换字符串的问题
    SQL> select substr('1234567',0,length('1234567')-4)||'0000' from dual;SUBSTR(
    -------
    1230000
    如果列A始终为7位,也可
    SQL> select substr('1234567',0,3)||'0000' from dual;SUBSTR(
    -------
    1230000
      

  2.   

    不好意思,可能是表达不清楚,解释一下
    根据substr(A,1,3)||'0000'来规类。目的是想得到规类之后每个类根据...SUM(D)...group by a...来排序,在排了序的结果中我只要前某个占比的数据。
    现在的情况是:如果substr(A,1,3)||'0000'只有一个类别,如1110000则能实现,主要是substr(A,1,3)||'0000'分为了多个类(几十个),并且每个类的数据很多(大概几千条),在一条语句中怎么实现。
      

  3.   

    select * from (select *,substr(a,Length(A) - 4,4)||'0000' name FROM table1) a where (a.d/(select sum(b.d) from (select *,substr(a,Length(A) - 4,4)||'0000' name FROM table1 ) b where b.name=a.name))>0.5
      

  4.   

    (a.d/(select sum(b.d) from (select *,substr(a,Length(A) - 4,4)||'0000' name FROM table1 ) b where b.name=a.name))>0.5
    我要的结果是根据substr(a,Length(A) - 4,4)||'0000' 分组,按SUM(D)排序,显示substr(a,Length(A) - 4,4)||'0000'记录条数的占比的记录,意思是这样,substr(a,Length(A) - 4,4)||'0000'如果有80个,并且分组后,每个组里面的记录数几百到几千不等,我要的结果是,
    80个组里面,相应所有记录数排序之后前N%记录明细(A,substr(a,Length(A) - 4,4)||'0000' ,B,C,SUM(D).
      

  5.   

    谢谢以上回答,本人再说明一下意投:
       比如substr(a,Length(A) - 4,4)||'0000' 有三个组,记录数{select count(m.*),m.a1 form (select *,substr(a,Length(A) - 4,4)||'0000' a1 FROM table1)m group by m.a1
    }分别为24,20,100.
        我想要的结果是三个组根椐SUM(D)排序前50%的记录数,即:三个组最后所要记录明细条目数分别为:12,10,50,
      

  6.   

    你是要取每一个类别(即a的前三位)按D排行前50%的记录,这个在ORACLE805有一点难,
      

  7.   

    在8I以上可以试试:
    select al,a,b,c,d from 
    (select substr(a,1,3)||'0000' al,a,b,c,d,rank() over(order by d desc partition by
    substr(a,1,3)||'0000') px from table1),
    (select substr(a,1,3)||'0000' ab,count(*) zlsl from table1 group by substr(a,1,3)||'0000')
    where al=ab and px/zlsl<=0.5
      

  8.   

    tsj68(tsj)可以实现不?一个一个的类别(即a的前三位)按D排行前50%的记录可以实现,但一次把所有类的取出来不知道怎么实现了?请指教!!!!!!!