SQL笔试题

Posted by 道行尚浅 on January 17, 2018

有表A

ID VALUE1 VALUE2
100001 10 10
100002 20 20
100003 30 30
100004 40 40
100001 10 10
100002 20 20
100003 30 30
100004 40 40

希望得到表B的结果

VALUE1 VALUE2
9.9   10.1
20.1 19.9
29.9 30.1
40.1 39.9
9.8 10.2
20.2 19.8
29.8 30.2
40.2 39.8
SQL> with dao_t as
  2  (select  1000001 id ,10 value1 ,10 value2 from dual
  3     union all
  4   select  1000002 id ,20 value1 ,20 value2 from dual
  5     union all
  6   select  1000003 id ,30 value1 ,30 value2 from dual
  7      union all
  8   select  1000004 id ,40 value1 ,40 value2 from dual
  9     union all
 10    select  1000001 id ,10 value1 ,10 value2 from dual
 11     union all
 12   select  1000002 id ,20 value1 ,20 value2 from dual
 13     union all
 14   select  1000003 id ,30 value1 ,30 value2 from dual
 15      union all
 16   select  1000004 id ,40 value1 ,40 value2 from dual
 17  )
 18  select
 19        (case when mod(rownum,2) =0 then 1 else 2 end )*
 20        (case when mod(value1/10,2)=1 then -1 else 1 end ) *0.1+value1 value1,
 21        (case when mod(rownum,2) =0 then 1 else 2 end )*
 22        (case when mod(value1/10,2)=1 then -1 else 1 end ) *-1*0.1+value2 value2
 23   from ( select value1,value2 from dao_t order by value1 )
 24  ;
    VALUE1     VALUE2
---------- ----------
       9.8       10.2
       9.9       10.1
      20.2       19.8
      20.1       19.9
      29.8       30.2
      29.9       30.1
      40.2       39.8
      40.1       39.9
8 rows selected