sql >> Database >  >> RDS >> Oracle

hoe één kolomgegevens van de ene tabel naar een andere tabel te krijgen als verschillende kolommen in PL/SQL

Als u garandeert dat de gegevens in uw brontabel in deze specifieke volgorde staan, kunt u een vergelijkbare query schrijven om het gewenste resultaat te bereiken:

-- sample of data from your question
SQL> with t1(col) as(
  2    select 'Scott'  from dual union all
  3    select '100'    from dual union all
  4    select '10'     from dual union all
  5    select 'Miller' from dual union all
  6    select '200'    from dual union all
  7    select '20'     from dual union all
  8    select 'Mike'   from dual union all
  9    select '300'    from dual union all
 10    select '30'     from dual union all
 11    select 'Allen'  from dual union all
 12    select '400'    from dual union all
 13    select '40'     from dual
 14  ) -- the query
 15  select max(decode(mod(rownum - 1, 3), 0, col)) as name
 16       , max(decode(mod(rownum - 1, 3), 1, col)) as sal
 17       , max(decode(mod(rownum - 1, 3), 2, col)) as depno
 18    from t1
 19    group by trunc((rownum -1)/ 3)
 20  /

NAME   SAL    DEPNO
------ ------ ------
Miller 200    20
Mike   300    30
Allen  400    40
Scott  100    10

Aanvulling

Je hebt hiervoor geen cursor nodig (tenzij het een speciale vereiste is die het gebruik van cursors vereist). Om een ​​andere tabel met gegevens te vullen, kunt u eenvoudig INSERT INTO ... SELECT gebruiken :

insert into temp_process(name, sal, depno)
   select max(decode(mod(rownum - 1, 3), 0, col)) 
        , max(decode(mod(rownum - 1, 3), 1, col)) 
        , max(decode(mod(rownum - 1, 3), 2, col))
     from table_a
     group by trunc((rownum -1)/ 3)  



  1. MySQL Hoe maak ik deze subquery aan?

  2. ID-veld invoegen gegenereerd door trigger, maar niet doorgegeven

  3. INDIA, STD Code Finder-script in PHP, MYSQL, JQUERY

  4. Hoe mssql-script naar mysql te converteren