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

Oracle SQL - Kontingenční tabulka řádků do sloupce a použití dílčího dotazu v pivotu

Stačí použít podmíněnou agregaci:

SELECT COALESCE(customer, 'Grand Total') as customer,
       SUM(CASE WHEN Hotel = 'Royal Palms' THEN 1 ELSE 0 END) as "Royal Palms",
       SUM(CASE WHEN Hotel = 'Beverly Hills' THEN 1 ELSE 0 END) as "Beverly Hills",       
       SUM(CASE WHEN Hotel = 'Ritz-Carlton' THEN 1 ELSE 0 END) as "Ritz-Carlton" ,
       COUNT(*) as "Grand Total",
       COUNT(Booked_Status) as "Num Booked"
FROM CUST_HOTEL_VIEW
GROUP BY ROLLUP(CUSTOMER)
ORDER BY CUSTOMER;

Podmíněná agregace je mnohem flexibilnější než pivot . Osobně nevidím důvod pro pivot syntaxe:dělá jednu věc dobře, ale není stavebním kamenem, jakým jsou tradiční příkazy SQL.

ROLLUP() je také docela užitečné. Můžete také použít:

GROUP BY GROUPING SETS ( (CUSTOMER), () )


  1. MySQL Pomalé připojení – ale ne vždy a ne na všech stolech

  2. Má Mysql ekvivalent @@ROWCOUNT jako v mssql?

  3. Hibernate-envers vyvolá výjimku při mazání entity s kolekcí pomocí CrudRepository

  4. Jak vybrat více řádků z mysql jedním dotazem a použít je v php