Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL - linhas da tabela dinâmica para coluna e use subconsulta no pivô


Basta usar a agregação condicional:
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;

A agregação condicional é muito mais flexível do que pivot . Pessoalmente, não vejo motivo para o pivot sintaxe:ele faz uma coisa bem, mas não é um bloco de construção como as instruções SQL tradicionais são.

ROLLUP() também é bastante útil. Você também pode usar:
GROUP BY GROUPING SETS ( (CUSTOMER), () )