sql >> Databasteknik >  >> RDS >> Oracle

hur man hämtar en kolumndata från en tabell till en annan tabell som olika kolumner i PL/SQL

Om du garanterar att data i din källtabell kommer att vara i denna speciella ordning kan du skriva en liknande fråga för att uppnå önskat resultat:

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

Tillägg

Du behöver ingen markör för detta (såvida det inte är något slags speciella krav som kräver användning av markörer). För att fylla annan tabell med data kan du helt enkelt använda 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. Konvertera effektivt rader till kolumner i sql-servern

  2. Refaktorera en PL/pgSQL-funktion för att returnera utdata från olika SELECT-frågor

  3. Att lägga till främmande nyckel misslyckas i MySQL (fel 150)

  4. hur blockerar man infoga dubblettpost i noden mysql för många-till-många-relation?