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

Langage SQL Discussion :

Requête créant des valeurs ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 116
    Points : 49
    Points
    49
    Par défaut Requête créant des valeurs ?
    Bonjour,

    J'ai une table qui contient un grand nombre de valeurs, cependant, si les valeurs étaient à 0 lors de l'input, rien a été ajouté à la table. Je dois donc trouver un moyen pour faire en sorte de remplir ces "trous" avec des 0.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Service     Domaine     Personnes
    1           1           1
    2           1           3
    3           1           5
    1           2           2
    3           2           4
    Dans mon petit exemple, on peut voir que le service 2 du domaine 2 n'existe pas car il n'y avait 0 personne. Je dois donc créer une requête me permettant d'avoir ce résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Service     Domaine     Personnes
    1           1           1
    2           1           3
    3           1           5
    1           2           2
    2           2           0
    3           2           4
    Si quelqu'un pouvait m'aider, ce serait grandement apprécié.

    Merci !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Vous pouvez faire un produit cartésien entre les services et les domaines, puis faire une jointure externe du résultat à votre table actuelle pour récupérer la valeur de "personnes". Vous pourrez ensuite remplacer les NULL par des 0.

    Comment déterminez vous l'ensemble des valeurs de service et de domaine?
    En admettant que ce soit en en sélectionnant les valeurs distinctes de votre table (table1 dans la requête) :
    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
    WITH domaine
    AS
    (
    	SELECT DISTINCT domaine 
    	FROM table1
    ),
    service AS
    (
     	SELECT DISTINCT service 
    	FROM table1
    )
    SELECT s.service, d.domaine, coalesce(t.personnes,0) AS personnes
    FROM domaine d
    CROSS JOIN service s
    LEFT JOIN table1 t 
    	 ON t.service = s.service 
    	 AND t.domaine = d.domaine
    ORDER BY domaine, service, personnes
    Si les colonnes service et domaine de votre table sont des clés étrangères, vous pouvez peut être utiliser les tables référencées pour faire votre produit cartésien.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 116
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Tout d'abord, un grand merci pour votre aide.

    En ce qui concerne la répartition de mes données, la voici:
    T_PIL_Services = Contient tous les services avec un ID, Code et Nom
    T_PIL_Domaines = Contient tous les domaines avec un ID, Zone et Nom
    T_MODEL_Personnes = Contient toutes les personnes rattachées à un service et un domaine.

    Je travail actuellement sous Access 2007, j'ai donc remplacé le coalesce par la fonction Nz et le cross join par un simple FROM T_PIL_Domaines d, T_PIL_Services s

    Cependant, le WITH ne semble pas fonctionner sous Access, j'ai donc tenté de simplement ajouter les valeurs dans mon select, mais je reçois une erreur de syntaxe dans l'opération JOIN

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    D'où l'utilité de préciser son SGBD, Access est assez spécial.
    Une remarque en passant, vos colonnes ID ne devraient pas avoir le même nom d'une table à une autre, c'est plus simple de s'y retrouver dans l'écriture des requêtes. Par exemple id_domaine et id_service.

    Si vous n'avez toujours pas votre solution, essayez peut être comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT sd.id_service, sd.id_domaine, coalesce(t.personnes,0) AS personnes
    FROM (SELECT d.ID AS id_domaine, s.ID AS id_service FROM T_PIL_Domaines d, T_PIL_Services s) sd
    LEFT JOIN table1 t 
         ON t.id_service = sd.id_service 
         AND t.id_domaine = sd.id_domaine
    ORDER BY id_domaine, id_service, personnes

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 116
    Points : 49
    Points
    49
    Par défaut
    Ça semble fonctionner !

    Un très très grand merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur dans une requête avec des valeurs contenant \
    Par KIK83 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/12/2009, 16h06
  2. requête avec des valeurs manquantes
    Par DiverSIG dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/08/2009, 14h05
  3. Requête renvoyant des valeurs de mois, mois - 1 et mois d'année -1
    Par Bernard67 dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 09/10/2008, 19h41
  4. [VB.NET] [ODBC] Récupérer des valeurs avec requête ODBC?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/03/2005, 16h38
  5. [SQL] Ma requête m'oblige à saisir des valeurs manuellement
    Par bossun dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/10/2003, 13h29

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