有这么一张表
CREATE TABLE table_test
(
   ID NUMBER,
   NAME VARCHAR2(80),
   age   NUMBER,
   birthplace varchar2(240)
)
插入数据
INSERT INTO table_test VALUES(1,'TOM',20,'China');INSERT INTO table_test VALUES(2,'TOM',23,'China');想实现一条语句就是当NAME、birthplace相同时,下一条数据的age为0,实现效果ID    NAME     AGE    BIRTHPLACE
1     TOM       20       CHINA
2     TOM        0       CHINA请问用一条sql语句如何实现呢?

解决方案 »

  1.   

    试试  insert all  看看·
      

  2.   

    select id,name, case when name||birthplace=lab then 0 else age end age,birthplace from (
    SELECT t.*,
           lag(t.name || t.birthplace) over(PARTITION BY t.name, t.birthplace ORDER BY id) lab
      FROM table_test t);
      

  3.   

    如果只是这两条数据的话,直接insert 最方便。如果是多条,可以写成个存储过程执行
      

  4.   

    方法和ls差不多,写一个SELECT m.ID,
           m.NAME,
           DECODE(m.cnt, 1, m.age, 0) age,
           m.birthplace
      FROM (SELECT t.*,
                   row_number() OVER(PARTITION BY t.NAME, t.birthplace ORDER BY t.ID) cnt
              FROM table_test t) m
     ORDER BY 1
      

  5.   

    select a.id,a.name,nvl(b.age,0),a.birthplace,b.lab
    from table_test a
      left join    (select min(id) id,min(age) age,name,birthplace,min(name||birthplace) lab
              from table_test
              group by name,birthplace) b
           on a.id = b.id
    order by a.id老的方法