现在有这么一条sql
select id,......
group by id现在是数据库里的新旧数据有冲突,
id 的值有000011跟11这样的区别,旧的数据该属性有补零,新的数据没有。
然后现在000011跟11其实是同一组数据,需要进行合计等计算,这样需要怎样改呢?
select ltrim(id, '0')....
这样倒是去掉0了,可是依旧分不了组,要怎么弄呢?

解决方案 »

  1.   

    SQL> SELECT LPAD('123',10,'0') FROM dual;
     
    LPAD('123',10,'0')
    ------------------
    0000000123
     
    SQL> 
      

  2.   

    select lpad(id,6,'0'),......
    group by lpad(id,6,'0')
      

  3.   

    这里的id应该是字符型的,假设你的id最大长度是6位,不足的左补齐之。select lpad(id,6,'0'),sum(合计字段) from table_name
    group by lpad(id,6,'0');
      

  4.   

    with temp as(
    select '000011' id,12 kk from dual
    union all
    select '11' id,23 kk from dual
    union all
    select '000022' id,34 kk from dual
    union all
    select '22' id,44 kk from dual
    )
    select sum(kk),trim(translate(id,'0',' ')) from temp group by trim(translate(id,'0',' '))
      

  5.   

     group by ltrim(id, '0')
    我一开始以为是这样写法不行,现在看原来是可以的。
    刚又看了下表,id是char型的
    我这还要加个trim再进行分组才行,哎
      

  6.   

    id 的字段是定长还是变长的
    估计是变长引起的空格的问题
    update tb set id=replace(id,' ','')
    alter table tb modify id varchar2(6)--改为变长的
    在使用select ltrim(id, '0')....  或者lpad(id,6,'0')
    应该是可以的
      

  7.   

    呵呵,group by后面只要不跟聚组函数就可以