Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PIVOT Oracle - przekształć dane z wielu wierszy w jeden wiersz z wieloma kolumnami, bez danych zagregowanych

Nie robisz nic z opisem, który również zmienia się wraz z tagiem. Nie jest agregowany, więc w niejawnym „grupuj według”, więc otrzymujesz oddzielne wiersze w zestawie wyników.

Możesz to również uchwycić za pomocą innego (fikcyjnego) agregatu:

select * from (
  select * from TEST2 where tag in ('LN', 'SN')
)
PIVOT
(
  max(value) as value, max(description) as description
  for tag in ('LN' as ln, 'SN' as sn)
)
order by category, subcat, item, "Date";

Date      SUBCAT CATEGOR IT LN_VALUE          LN_DESCRIPTION  SN_VALUE          SN_DESCRIPTION
--------- ------ ------- -- ----------------- --------------- ----------------- ---------------
24-OCT-13 290223 1219576 25 1105618           Lot Number      3x12mm            Serial Number  
24-OCT-13 290223 1219576 28 1303757           Lot Number                                       
18-JUN-15 354506 1219576 4  1403114           Lot Number                                       
18-JUN-15 354506 1219576 9  7777777777        Lot Number      9.999999999999E12 Serial Number  

Lub, co bardziej prawdopodobne, wyklucz go z pośredniego zestawu wyników, jeśli tego nie chcesz, określając kolumny, które chcesz, zamiast używać * :

select * from (
  select category, subcat, item, "Date", tag, value
  from TEST2 where tag in ('LN', 'SN')
)
PIVOT
(
  max(value) for tag in ('LN' as ln, 'SN' as sn)
)
order by category, subcat, item, "Date";

CATEGOR SUBCAT IT Date      LN                SN              
------- ------ -- --------- ----------------- -----------------
1219576 290223 25 24-OCT-13 1105618           3x12mm           
1219576 290223 28 24-OCT-13 1303757                            
1219576 354506 4  18-JUN-15 1403114                            
1219576 354506 9  18-JUN-15 7777777777        9.999999999999E12


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rozwiązać ORA-00939:zbyt wiele argumentów dla błędu funkcji?

  2. Połączenie jdbc za pomocą cienkiego sterownika

  3. Oracle:Co robi `(+)` w klauzuli WHERE?

  4. Jak dodać numer wiersza w grupie w moim zapytaniu

  5. Jak zwrócić boolena w refcursorze?