2017-10-05 4 views
1

J'essaie de compter le nombre de chambres par hôtel pour tous les hôtels. J'ai 3 tables, une avec l'identification d'hôtel et l'information d'hôtel, l'autre avec les états où les hôtels sont (parts Hotel_ID) et un troisième qui a l'information de pièce par identification d'hôtel. Mais je peux obtenir le travail "COUNT" et "GROUP BY" dans cette phrase. J'utilise Oracle sqldeveloperImpossible d'utiliser le groupe par, ORA-00979: pas une expression GROUP BY

SELECT UPPER(A.HOTEL_NAME) "HOTEL NAME", 
     B.STATE AS STATE, 
     COUNT(C.ROOM_NUMBER) 

FROM HOTEL A 
    INNER JOIN STATE B ON B.ID_STATE = A.ID_STATE 
    INNER JOIN ROOM C ON C.ID_HOTEL = A.ID_HOTEL 

GROUP BY A.ID_HOTEL 
ORDER BY A.HOTEL_NAME ASC; 

Lorsque je tente sans le « COUNT » et « GROUP BY » clauses il montre sans problème le nom de l'hôtel dans la première colonne et dans le 2ème l'état où l'hôtel est-il . Quelqu'un sait pourquoi je n'arrive pas à obtenir le nombre de chambres par hôtel (dans une troisième colonne) regroupées par ID d'hôtel?

SAMPLE DATA: 
HOTEL TABLE     ROOM TABLE    STATE TABLE 
========================== ======================= ====================== 
ID_HOTEL | HOTEL_NAME  ID_HOTEL | ROOM_NUMBER ID_HOTEL | STATE 
40  |STARDUST HOTEL  40  |101   40  |CALIFORNIA 
50  |GREENTREE HOTEL 50  |101   50  |ARIZONA 

Je me attends quelque chose comme ceci:

RESULTING VIEW: 
HOTEL_NAME  |STATE  |ROOM_COUNT 
STARDUST HOTEL |CALIFORNIA |1 
GREENTREE HOTEL|ARIZONA  |1 

Merci à l'avance!

Répondre

1

Il vous manque des colonnes dans votre expression GROUP BY. N'a pas obtenu un environnement SQL pratique donc je ne suis pas en mesure d'exécuter ce (plus vous n'avez pas fourni des données d'ensemble d'échantillons afin de ne pas sûr si cardinalité etc. est correct), mais essayez:

SELECT 
    UPPER(A.HOTEL_NAME) "HOTEL NAME", 
    B.STATE AS STATE, 
    COUNT(C.ROOM_NUMBER) 
FROM HOTEL A 
INNER JOIN STATE B ON B.ID_STATE = A.ID_STATE 
INNER JOIN ROOM C ON C.ID_HOTEL = A.ID_HOTEL 
GROUP BY A.ID_HOTEL, A.HOTEL_NAME, B.STATE 
ORDER BY A.HOTEL_NAME ASC; 

Avis J'ai ajouté les deux colonnes non agrégées de votre clause SELECT dans votre GROUP BY.

Modifier

Découvrez This SQL fiddle - laissez-moi savoir si je l'ai mal compris votre système, etc. Il travaille pour moi avec des modifications mineures.

+0

Merci pour la réponse rapide! Je vois et comprends maintenant pourquoi vous avez ajouté les deux colonnes non agrégées, cependant, je reçois toujours la même erreur :(. Donnez-moi une seconde pour télécharger des exemples de données! – Rycerzfrost

+0

Pas de soucis! Vérifiez le violon dans mon édition et laissez Je sais si cela fonctionne pour vous ou si j'ai mal compris quelque chose à propos de votre question –

+0

Ça marche maintenant, merci !! – Rycerzfrost