sql >> Databáze >  >> RDS >> Oracle

jak získat data jednoho sloupce z jedné tabulky do jiné tabulky jako různé sloupce v PL/SQL

Pokud zaručíte, že data ve vaší zdrojové tabulce budou v tomto konkrétním pořadí, můžete napsat podobný dotaz, abyste dosáhli požadovaného výsledku:

-- 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

Dodatek

K tomu nepotřebujete kurzor (pokud to není nějaký speciální požadavek, který vyžaduje použití kurzorů). K naplnění jiné tabulky daty můžete jednoduše použít INSERT INTO ... SELECT :

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. MariaDB představuje funkci JSON_TABLE().

  2. SQLAlchemy se pokouší dvakrát odstranit mnoho sekundárních vztahů

  3. Jak vytvořit naplněný MySQL Docker Image v době sestavení

  4. Vyhodnocení zkratu CASE a COALESCE funguje se sekvencemi v PL/SQL, ale ne v SQL