Combinar filas en una sola fila – Base de datos Oracle 11g
Tengo esta declaración SQL aquí:
SELECT DATETIME, DWH_ACCOMODATIONS.NAME, SUM(NIGHTS)
FROM dwh_data JOIN DWH_ACCOMODATIONS ON dwh_data.fk_accomodation = DWH_ACCOMODATIONS.CODE
WHERE dwh_data.fk_accomodation = 998 AND DATETIME BETWEEN 201001 AND 201012
GROUP BY DWH_ACCOMODATIONS.NAME, DATETIME, NIGHTS;
Esta declaración me da el siguiente resultado:
DATETIME NAME SUM(NIGHTS)
-------------- -------------- --------------
201011 Hotel 1<998> 12689
201012 Hotel 1<998> 18495
201012 Hotel 1<998> 4958
201012 Hotel 1<998> 37580
201011 Hotel 1<998> 85938
201011 Hotel 1<998> 27488
201011 Hotel 1<998> 9874
El problema, como puedes ver, es que la fecha y el nombre de un hotel están duplicados en la tabla.
Ahora me gustaría obtener un resultado como este:
DATETIME NAME SUM(NIGHTS)
-------------- -------------- --------------
201011 Hotel 1<998> 1268949
201012 Hotel 1<998> 1869859
Seguro que las noches también deben ser sumadas.
Ya lo intenté con esto en el GROUP BY:
GROUP BY ROLLUP(DWH_ACCOMODATIONS.NAME), ROLLUP(DATETIME), ROLLUP(NIGHTS)
davy.ai
Como experto en TI especializado en SQL y Oracle11g, me gustaría sugerir una modificación en la declaración SQL para obtener el resultado deseado.
En lugar de usar funciones ROLLUP en la cláusula GROUP BY, simplemente podemos eliminar la columna NIGHTS de la cláusula GROUP BY y usar SUM(NIGHTS) en la cláusula SELECT como se muestra a continuación:
Esta declaración SQL modificada nos dará el resultado deseado:
Espero que esto ayude. Avísame si tienes alguna pregunta adicional.