现有表:    km     kmdm      begin    end              km2  kmdm2   begin2  end2        sid     dw
           a                                         b                            1      
    101    aaa       100.00   50.00            201   bbb     120.00   30.00       2      1
    102    aab       100.00   50.00            201   bbb     120.00   30.00       2      1
    103    aac       100.00   50.00            202   bbc     120.00   30.00       2      1                                                     c                            10     1     
                                               301   ccc     100.00   50.00       11     1
                                               303   cab     23.00    12.00       11     1            d                                         e                           20     1 
    501    aaa       100.00   50.00            401   bbb     120.00   30.00       21     1
    501    aaa       100.00   50.00            402   bba     120.00   30.00       21     1
    501    aaa       100.00   50.00            401   bbb     120.00   30.00       21     1
    507    asd       100.00   50.00            402   bba     120.00   30.00       21     1
      
            hz       700.00   350.00                  hz     963.00   272.00      30     1 
___________________________________________________________________________________________________
            a                                         b                           1      
    101    aaa       100.00   50.00            201   bbb     120.00   30.00       2      2
    102    aab       100.00   50.00            201   bbb     120.00   30.00       2      2
    103    aac       100.00   50.00            202   bbc     120.00   30.00       2      2                                                     c                            10     2     
                                               301   ccc     100.00   50.00       11     2
                                               303   cab     23.00    12.00       11     2            d                                         e                           20     2 
    501    aaa       100.00   50.00            401   bbb     120.00   30.00       21     2
    502    aac       100.00   50.00            402   bba     120.00   30.00       21     2
    501    aaa       100.00   50.00            401   bbb     120.00   30.00       21     2
    507    asd       100.00   50.00            402   bba     120.00   30.00       21     2
    507    asd       100.00   50.00            403   bca     120.00   30.00       21     2            hz       XXX.00   XXX.00                  hz     XXX.00   XXX.00      30     2  这里面有很多重复的字段   怎么样才能把重复的字段取消掉  或者替换成NULL也好   让它显示为  例如    km     kmdm      begin    end              km2  kmdm2   begin2  end2        sid     dw
            a                                         b                           1      
    101    aaa       100.00   50.00            201   bbb     120.00   30.00       2      1
    102    aab       100.00   50.00        
    103    aac       100.00   50.00            202   bbc     120.00   30.00       2      1                                                     c                            10     1     
                                               301   ccc     100.00   50.00       11     1
                                               303   cab     23.00    12.00       11     1            d                                         e                           20     1 
    501    aaa       100.00   50.00            401   bbb     120.00   30.00       21     1
    507    asd       100.00   50.00            402   bba     120.00   30.00       21     1
      
            hz       700.00   350.00                  hz     963.00   272.00      30     1 
___________________________________________________________________________________________________
            a                                         b                           1      
    101    aaa       100.00   50.00            201   bbb     120.00   30.00       2      2
    102    aab       100.00   50.00            
    103    aac       100.00   50.00            202   bbc     120.00   30.00       2      2                                                     c                            10     2     
                                               301   ccc     100.00   50.00       11     2
                                               303   cab     23.00    12.00       11     2            d                                         e                           20     2 
    501    aaa       100.00   50.00            401   bbb     120.00   30.00       21     2
    502    aac       100.00   50.00            402   bba     120.00   30.00       21     2
    507    asd       100.00   50.00            403   bca     120.00   30.00       21     2            hz       XXX.00   XXX.00                  hz     XXX.00   XXX.00      30     2
  
   谢谢各位
          

解决方案 »

  1.   

    select distinct km,kmdm,begin,end from a;
    .........              
      

  2.   

    select distinct km,kmdm,begin,end,km2,kmdm2,begin2,end2,sid,dwa from table
      

  3.   

    问题好长啊..可以把例子精简来说明的
    楼主是想将左右两段的km和km2字段的值中,如果和前一条记录值相同,则不显示对吧
    case when km=lag(km)over(order by ..) then null else km end
    km2字段同样处理楼主可以试试
    如果还写不了说明清楚一点,这个表不知道按什么排序,而且中间是不是空上一段,看着有点别扭..
      

  4.   

    楼上大大  你的LAG函数我不是很懂  可以解释下么 ? 这个表  分为ABCDE 5个部分 不排序  要求显示出来就是这种格式     其中  例如 B部分  有2个201 数据时一样的 所以要求只显示一个  我不知道怎么把它挑出来更新成空值。~
      

  5.   

    lag是分析函数,要实现你需要的功能需要用到这个函数。这个函数返回上一条记录中的某一字段值,你将它与当前记录比较,如果相同,则显示空值。就能实现你要的效果。不排序的话就按rownum
    我写个km字段的,你参照下改其他的字段代码select case when km=lag(km)over(order by rownum) then null else km end km,
      case when km=lag(km)over(order by rownum) then null else kmdm end kmdm ,
     ......
    from ...
    where ...
      

  6.   

    或者写到子查询中
    select decode(flag_a,0,km) km,
      decode(flag_a,0,kmdm)kmdm,
    ....
    from(select t.*,
          case when km=lag(km)over(partition by rownum) then 1 else 0 end flag_a,
          case ................ flag_b..
        from table1 t)
      

  7.   

    这里的DW字段  是一个标识  例如 DW=1 为一块内容  DW=2 是一块    
     而我现在的表  就是像最上面的表一样   例如 DW=2那里的D部分  有2个501  E部分  有2个 401 ,402 这些数据是一摸一样的  完全重复  所以  我只要留下一个  其他显示NULL   也就是变成题目最下方那个DW=2的样子。。  我表达能力不是很好   真是麻烦你了   呵呵
      

  8.   

    不好意思,刚看到回复
    这是1个表的5个部分?看着挺别扭
    这样的话,a,b,c,d,e之间还有什么联系呢?
    你分开写成
    select distinct km ,kmdm,begin,end from table1;
    select distinct km1 ,kmdm1,begin1,end1 from table1;
    ....
    不是更好?