本帖最后由 sai_gogogo 于 2010-05-23 12:39:13 编辑

解决方案 »

  1.   

    因为没分,另外个号分也不够。所以只好重新注册一个号发的贴,诚心求大家帮助!!!!大家可以参看下原帖,不过原帖说的不是太清楚吧。 可做借鉴。另外把我自己做的情况说下:select M1,M2,M3 FROM  
      (select POWERNAME,
      min(case LEIBIENAME when '数据采集' then POWERNAME end) M1,
      min(case LEIBIENAME when '税源监控' then POWERNAME end) M2,
      min(case LEIBIENAME when '系统管理' then POWERNAME end) M3
      from sy_popedom
      group by POWERNAME)
    我是通过行转列的方式查出来的,但是我查出来的效果如下:
    问题我这样查出来的 每一列 都有很多空列, 但是要求的是每一列值都是完整的一排下来。
    在这里我就卡住了,不知道怎么解决。
    后来换用 distinct   来做 select distinct   t.POWERNAME,t1.POWERNAME,t2.POWERNAME from 
    SY_POPEDOM t,SY_POPEDOM t1,SY_POPEDOM t2 
    WHERE t.LEIBIENAME ='数据采集' and t1.LEIBIENAME='税源监控' and t2.LEIBIENAME='系统管理'
    但是因为结果并不是有重复的行信息,只是每列信息中有重复的,所以得到的结果  还是每列有大量的重复信息
    翻看了很多资料和高人的一些列子,都没有办法实现这个效果。
    所以请大家帮帮我~~~~~ 
    要崩溃了。。
      

  2.   


    单纯的凑出这个效果 我用的如下方法可以实现create table t1 as select  rownum as id, powername from sy_popedom where leibie=1;
    create table t2 as select  rownum as id, powername from sy_popedom where leibie=2;
    create table t3 as select  rownum as id, powername from sy_popedom where leibie=3;create table t
    (
      id number,
      p1 varchar2(50),
      p2 varchar2(50),
      p3 varchar2(50)
    );insert into t(id,p3) select * from t3;
    update t set p2=(select powername from t2 where t2.id=t.id);
    update t set p1=(select powername from t1 where t1.id=t.id);select * from t;
    但是感觉这样很愚笨吧,是完全凑出来的一个结果。 所以我想看还有更加合理和简单的方法没。
    不管是用存储过程,还是SQL语句。
    望大家都来提供想法和实现代码
      

  3.   

    select max(decode(leibie,'1',powername))m1,
      max(decode(leibie,'2',powername))m2,
      max(decode(leibie,'3',powername))m3 FROM  
      (select POWERNAME,
      leibie,
      row_number()over(partition by leibie order by powercode)pcode
      from sy_popedom
      )
      group by pcode;
      

  4.   

    另外在这里想向各位专家,提个问题。 就是ORALCE里面,能否同时对表内的多个列进行重复信息的删除处理? 情况是 重复信息是在不同的列里面,而不是在几行的信息重复。对表的单列去除重复信息我知道
    但是如同我这个题目select * from 
       ( select 
       ( case leibiename when '数据采集' then powername end) m1 from sy_popedom )  t1
        where t1.m1 is not null这样就可以清楚单列的了,可是我却无法做到同时一次清理多列重复信息。
      

  5.   

    这能去重复信息?
    多列的如果可能出现重复,将上面语句中row_number改成dense_rank
    你上面的用select distinct powername from sy_popedom where leibiename='数据采集'
    即可
      

  6.   

    你用 group by 只能对一列进行处理,无法对三列进行处理,因为三列的信息是全部是单独的!!!!
      

  7.   

    WITH sy_popedom AS(
      SELECT '帮助文档编辑' powername,'21479989' powercode,'3' leibie,'系统管理' lebiename FROM dual
      UNION ALL SELECT '分色地图','133122','2','税源监控' FROM dual
      UNION ALL SELECT '徒弟税清查汇报','32331','2','税源监控' FROM dual
      union all select '平台数据备份','23','1','xxx' from dual)
    --以上测试数据
    select max(decode(leibie,'1',powername))m1,
      max(decode(leibie,'2',powername))m2,
      max(decode(leibie,'3',powername))m3 FROM  
      (select POWERNAME,
      leibie,
      dense_rank()over(partition by leibie order by powercode)dk
      from sy_popedom
      )
      GROUP BY dk;M1             M2             M3             
    -------------- -------------- -------------- 
    平台数据备份    分色地图        帮助文档编辑    
                   徒弟税清查汇报                  
    什么地方不对
      

  8.   

    如果中间出现空值,就加个排序order by dk
      

  9.   

    人家都说了 加个order by 。你加上了吗?
      

  10.   

    回楼上 刚刚刷新慢,没看到后来那段!
    加 order by 问题解决了!!