IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[SQL] Accés info de 8 tables


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut [SQL] Accés info de 8 tables
    Bonjour à tous,
    dans le cadre d'un projet de fin d'année, on nous demande d'effectuer différentes requétes, mais là je coince sur une où l'on me demande de faire le total des employés, des clients, abonnées... en tt 8 totaux.
    Les faire un par un n'est pas très compliqué donc je souhaiterai les faire en une seule requète mais je demande à oracle trop d'accès aux tables, donc celui-ci ne fournit plus!!!
    Donc je cherche à créer une vue qui regroupera ts mes totaux!! mais celle-ci ne veut pas se créer.... je suis complétement paumé
    Donc voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE VIEW totaux
    (tot_employees) AS SELECT COUNT(employee_id) 
    FROM t_employees,
    (tot_clients) AS SELECT COUNT(client_id) 
    FROM t_clients,
    (tot_abonnes) AS SELECT COUNT(client_id) 
    FROM t_clients 
    WHERE MONTHS_BETWEEN(date_abonnemet, SYSDATE) <=12,
    (tot_trains) AS SELECT COUNT(train_id) 
    FROM t_trains,
    (tot_gares) AS SELECT COUNT(gare_id) 
    FROM t_gares,
    (tot_reservations) AS SELECT COUNT(reservation_id) 
    FROM t_reservations,
    (tot_billets) AS SELECT COUNT(billet_id) FROM t_billets
    /
    Donc s'il vous plait pouvez vous me venir en aide, cela fait 3 jours que je bute sur cette requéte déjà résolu de la façon la plus bête mais ce n'est pas cela que je recherche....
    Merci et à bientôt!

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE OR REPLACE VIEW totaux AS
    select sum (compte) from
    (SELECT COUNT(employee_id) as compte FROM t_employees
     union all
     SELECT COUNT(client_id) as compte FROM t_clients
     union all
     SELECT COUNT(client_id) as compte FROM t_clients 
     WHERE MONTHS_BETWEEN(date_abonnemet, SYSDATE) <=12
     union all
     SELECT COUNT(train_id) as compte FROM t_trains
     union all
     SELECT COUNT(gare_id) as compte FROM t_gares
     union all
     SELECT COUNT(reservation_id) as compte FROM t_reservations
     union all
     SELECT COUNT(billet_id) as compte FROM t_billets) 
    /

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Merci, j'essaye ça sur le champs!!!
    Bon oracle me met une erreur!!!
    ERREUR à la ligne 2 :
    ORA-00998: must name this expression with a column alias

    Là par contre je ne sais vraiment pas quoi faire!!!

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Ajouter les gares et les clients ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE VIEW totaux AS 
    select SUM(Employees), SUM(Clients), ... from 
    (SELECT COUNT(employee_id) as Employees, 0 as Clients, 0 as ... FROM t_employees 
     union all 
     SELECT 0, COUNT(client_id) , 0, ...FROM t_clients 
     union all 
    ...
    )

  5. #5
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Exact Médiat.

    J'ai été trop vite, et j'ai ajouté les choux avec les carottes et les navets...

    Remarque, cela fait un bon pot-au-feu !!!

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par rouardg
    J'ai été trop vite, et j'ai ajouté les choux avec les carottes et les navets...

    Remarque, cela fait un bon pot-au-feu !!!

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Si tu ne veux ces données qu'une seule fois, pas la peine d'utiliser une vue, un SELECT INTO marche.

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Donc si j'ai bien suivi, mon code devrait être celui-ci!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE VIEW totaux AS
    select SUM(Employees), SUM(Clients), SUM(Abonnes), SUM(Trains), SUM(Gares), SUM(Reservations), SUM(Billets) from
    (SELECT COUNT(employee_id) as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_employees,
     union all
     SELECT 0 as Employees, COUNT(client_id) as Clients , 0 as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_clients,
     union all
    SELECT 0 as Employees, 0 as Clients, COUNT(client_id) as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_clients WHERE MONTHS_BETWEEN(date_abonnement, SYSDATE) <=12,
     union all
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, COUNT(train_id) as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_trains,
     union all
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, COUNT(gare_id) as Gares, 0 as Reservations, 0 as Billets FROM t_gares,
     union all
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, 0 as Gares, COUNT(reservation_id) as Reservations, 0 as Billets FROM t_reservations,
     union all
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, COUNT(billet_id) as Billets FROM t_billets,
     union all
    )

    Mais oracle me rejette en disant: error ligne 4
    invalide table name qui correspond au premier union all

    J'ai aussi une autre question, comment je fais pour appeller mes totaux pour les afficher clairement dans une requéte, vu que je dois faire le % d'abonnés par rapport au clients?
    Merci de votre compréhension et désolé pour la géne, je débute!!!!

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Si tu ne veux ces données qu'une seule fois, pas la peine d'utiliser une vue, un SELECT INTO marche.
    En fait ce que je veux faire c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT COUNT(employee_id) AS "Total employées"
    FROM t_employees;
    SELECT COUNT(client_id) AS "Total clients"
    FROM t_clients;
    SELECT COUNT(DISTINCT nom) AS "Total clients"
    FROM t_clients;
    SELECT (COUNT(client_id)/ (SELECT COUNT(DISTINCT nom)
    		               FROM t_clients)) * 100) AS "Pourcentage client abonnés"
    FROM t_clients
    WHERE MONTHS_BETWEEN(date_abonnement, SYSDATE) <= 12);
    SELECT COUNT(reservation_id) AS "Total reservations"
    FROM t_reservations;
    SELECT COUNT(train_id) AS "Total trains"
    FROM t_trains;
    SELECT COUNT(gare_id) AS "Total gares"
    FROM t_gares;
    SELECT COUNT(billet_id) AS "Total billets"
    FROM t_billets;
    En une seule requéte!!! bon y a une erreur à Pourcentage clients abonnés

    Sinon peut tu m'expliquer comment marche le SELECT INTO?
    Merci

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Il ne faut pas de ',' après entre les SELECT et les UNION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    select SUM(Employees), SUM(Clients), SUM(Abonnes), SUM(Trains), SUM(Gares), SUM(Reservations), SUM(Billets) 
    INTO v_nbempl, v_nbcli, v_nbabo, v_nbtrain, v_nbgares, v_nbresa, v_nbbillet
    FROM
    (SELECT COUNT(*) as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_employees
     union all 
     SELECT 0 as Employees, COUNT(*) as Clients , 0 as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_clients
     union all 
    SELECT 0 as Employees, 0 as Clients, COUNT(*) as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_clients WHERE MONTHS_BETWEEN(date_abonnement, SYSDATE) <=12
     union all 
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, COUNT(*) as Trains, 0 as Gares, 0 as Reservations, 0 as Billets FROM t_trains
     union all 
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, COUNT(*) as Gares, 0 as Reservations, 0 as Billets FROM t_gares
     union all 
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, 0 as Gares, COUNT(*) as Reservations, 0 as Billets FROM t_reservations
    UNION ALL 
    SELECT 0 as Employees, 0 as Clients, 0 as Abonnes, 0 as Trains, 0 as Gares, 0 as Reservations, COUNT(*) as Billets FROM t_billets)
    Pour bien comprendre, joue la requete à partir du premier SELECT count(*)

    J'ai mis des count(*) au lieu de count(client_id) pour une question d'opti.

  11. #11
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour simplifier le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT SUM(Employees), SUM(Clients), SUM(Abonnes), SUM(Trains), SUM(Gares), SUM(Reservations), SUM(Billets) 
    INTO v_nbempl, v_nbcli, v_nbabo, v_nbtrain, v_nbgares, v_nbresa, v_nbbillet
    FROM
    (SELECT COUNT(*) AS Employees, 0 AS Clients, 0 AS Abonnes, 0 AS Trains, 0 AS Gares, 0 AS Reservations, 0 AS Billets FROM t_employees
     UNION ALL 
     SELECT 0, COUNT(*), 0, 0, 0, 0, 0 FROM t_clients
     UNION ALL 
    SELECT 0, 0, COUNT(*), 0, 0, 0, 0 FROM t_clients 
    WHERE MONTHS_BETWEEN(date_abonnement, SYSDATE) <=12
     UNION ALL 
    SELECT 0, 0, 0, COUNT(*), 0, 0, 0 FROM t_trains
     UNION ALL 
    SELECT 0, 0, 0, 0, COUNT(*), 0, 0 FROM t_gares
     UNION ALL 
    SELECT 0, 0, 0, 0, 0, COUNT(*), 0 FROM t_reservations
    UNION ALL 
    SELECT 0, 0, 0, 0, 0, 0, COUNT(*) FROM t_billets
    )

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Sinon est ce que j'ai la possiblité de créer une table qui regroupera tts mes sous requétes?
    Parce que par exemple pour connaitre le nom de la gare de départ et d'arrivé je suis obligé de faire t.depart_id = g.gare_id
    et t.arrivee_id = g.gare_id et la ça coince!!!
    Donc est ce que je peux faire une table qui regroupe tt les infos sur le trajet: gare départ, gare arrivée, durée du trajet?
    Si oui comment faire?

    Parce que accéder à un même champs d'une même table et me fallant 2 valeurs différentes me coince pour plusieurs requétes!!
    Merci à tous et bonne journée!!!

  13. #13
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Parce que par exemple pour connaitre le nom de la gare de départ et d'arrivé je suis obligé de faire t.depart_id = g.gare_id
    et t.arrivee_id = g.gare_id et la ça coince!!!
    Tu veux la gare de départ de ton train et la gare d'arrivée de ce même train.
    Il faut mettre 2 fois la table gare.. (C'est une base SQL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t.train_id, gd.nomgare as nom_gare_depart, ga.nomgare as nom_gare_arrivee
    FROM TRAIN t, GARE gd, GARE ga
    WHERE t.train_id = 168
    AND t.depart_id = gd.gare_id
    AND t.arrivee_id = ga.gare_id

  14. #14
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Je vois mal en quoi la résolution de ce problème peut être réutilisé par quiquonque...

    Le forum n'a pas et n'aura jamais vocation à faire du debbug ou à faire le boulot à la place des intervenants !!!

  15. #15
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Je vois mal en quoi la résolution de ce problème peut être réutilisé par quiquonque... Confused

    Le forum n'a pas et n'aura jamais vocation à faire du debbug ou à faire le boulot à la place des intervenants !!!
    Je suis d'accord avec toi, mais je suis désolé mais tt le monde je pense, est passé par la phase de débutant, en tout cas merci beaucoup à tous et désolé pour la géne.....
    Je vais voir ce que je peux faire avec cela!!!

Discussions similaires

  1. Accès à des synonymes de tables en PL/SQL
    Par boisdin dans le forum PL/SQL
    Réponses: 2
    Dernier message: 05/11/2010, 11h28
  2. Accès infos d'une table via une autre
    Par Invité dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2008, 22h36
  3. Réponses: 3
    Dernier message: 06/12/2006, 12h44
  4. [ADO.Net][C#] Comment récupérer des infos d'une table SQL ?
    Par lamojuli dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/01/2006, 17h00
  5. Requette de joiture sql avec au moin 3 tables
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/03/2004, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo