表的格式就是这样的。
ZYH    DM  想要的效果是
  如果ZYH 号码跟ZYH号码相等则,DM 想后排列。
 例如 0000374445 这个号码跟下面的相等 则DM 想后排列
  
想要的数据是 
  ZYH                        DM                   DM 1
 0000374902          50.24001                        
 50.24001                33.231  
 0000374445           74.3 002         74.1 002
 0000376096           41.381            41.2   
 0000374460           33.231  
 查询的结果是表格形式的,DM 和DM1是表格的,中间不是逗号分开的。
   
 最后给出SQL代码加上分析 注解 谢谢

解决方案 »

  1.   

    只是用了部分数据
    WITH t AS (
    SELECT 0000374445 zyh, '74.3 002' DM, '2015/2/2' sj FROM dual
    UNION
    SELECT 0000374445 zyh, '74.1 002' DM, '2015/2/2' sj FROM dual
    UNION
    SELECT 0000376096 zyh, '41.381' DM, '2015/2/3' sj FROM dual
    UNION
    SELECT 0000376096 zyh, '41.21' DM, '2015/2/5' sj FROM dual
    UNION
    SELECT 0000374460 zyh,'33.231' DM, '2015/2/5' sj FROM dual
    )
    SELECT tt.zyh,
    MAX(DECODE(rn,1,dm,NULL)) dm,
    MAX(DECODE(rn,2,dm,NULL)) dm1
    FROM
    (SELECT t.*,
    row_number() OVER(PARTITION BY zyh ORDER BY zyh) rn
    FROM t) tt
    GROUP BY tt.zyh;
      

  2.   

    也可以这样
    select id, num, num1
      from (select id,
                   num,
                   lead(num, 1, null) over(partition by id order by id) num1
              from tlead1) aa
     where rowid in (select min(rowid) from tlead1 bb where aa.id = bb.id)
      

  3.   

      2楼的,是写死的代码,我的数据量很大的,这种办法不现实的
      3楼的,你这个虽然是实现的。但是只能去2中情况的
          
          
          麻烦3楼在给讲解下哈
        这个lead 只能取偏移量的也就是说只能取下一个数的
       这么循环取完所以的6个了
      

  4.   

    WITH T AS
     (SELECT 0000374445 ZYH, '74.3 002' DM, '2015/2/2' SJ
        FROM DUAL
      UNION
      SELECT 0000374445 ZYH, '74.1 002' DM, '2015/2/2' SJ
        FROM DUAL
      UNION
      SELECT 0000376096 ZYH, '41.381' DM, '2015/2/3' SJ
        FROM DUAL
      UNION
      SELECT 0000376096 ZYH, '41.21' DM, '2015/2/5' SJ
        FROM DUAL
      UNION
      SELECT 0000374460 ZYH, '33.231' DM, '2015/2/5' SJ
        FROM DUAL)
    SELECT ZYH, MAX(DM) AS DM, MIN(DM) AS DM1 FROM T GROUP BY ZYH
      

  5.   

    Lead(exp_str,offset,defval) over()   
    offset是偏移几行,随意偏移几行都可以。最大的问题是,难道你确定有多少行重复的?或者说,动态展示的列不知道有多少个?
      

  6.   

    不知道确切的列数,无法实现的需求吧。
    可能pl/sql能做
      

  7.   

     有待改进,能实现动态SELECT *
    FROM(
    SELECT ZYH,DM,ROW_NUMBER()OVER(PARTITION BY ZYH ORDER BY ROWNUM) AS RN
    FROM TEST_001) A PIVOT(
    MAX(DM) AS DM FOR RN IN(
    1 ,
    2,

    )
    );