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

PostgreSQL Discussion :

[Requête]Requête avec condition


Sujet :

PostgreSQL

  1. #1
    Membre régulier Avatar de Miles Raymond
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 189
    Points : 83
    Points
    83
    Par défaut [Requête]Requête avec condition
    Bonjour,

    Voilà, je développe un programme de gestion particulier ( je vais pas entrer dans les détails) et là j'ai un petit problème de requête.

    En fait il y a 4 tables. Une table clients, une table factures, une table bâtiments et une table rénovations. J'aimerais pouvoir récupérer toutes les factures d'un client x avec : son noFacture, le noBatiment, le nomBatiment et si une rénovation à eu lieu, le noRenovation et la date de la renovation. Mais j'aimerais que cette requête me sélectionne les données de rénovation uniquement pour le batiment de la facture en question et UNIQUEMENT si une ou plusieurs rénovation on eu lieu pour ce bâtiment.

    Avec des INNER JOINT le problème est qu'à chaque sélection du noRenovation et de la date il me sélectionne la facture,etc.. Par exemple il me sélectionne tout ça 4 fois si 4 rénovations ont eu lieu !

    Une idée d'une méthode qui me permettrait une sélection non redondante des données ?

    Merci d'avance.

  2. #2
    Membre régulier Avatar de anto
    Inscrit en
    Juin 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 86
    Points : 84
    Points
    84
    Par défaut
    select ...
    inner join ...
    where Batiment.noBatiment || ';' || renovations.norenovation in (Select noBatiment || ';' || Max(DateRenovation) from renovations Group by noBatiment)

    Cette requete devrait te permettre de récupérer seulement la dernière renovation de la facture du client

  3. #3
    Membre régulier Avatar de Miles Raymond
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 189
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par anto
    select ...
    inner join ...
    where Batiment.noBatiment || ';' || renovations.norenovation in (Select noBatiment || ';' || Max(DateRenovation) from renovations Group by noBatiment)

    Cette requete devrait te permettre de récupérer seulement la dernière renovation de la facture du client
    En fait je ne cherches pas à récupérer la dernière rénovation de la facture du client. J'exécute une requête qui récupérera toutes les factures du client et qui, si la facture concerne des rénovations (car elles peuvent concerner d'autres choses), récupère le noRenovation et la dateRenovation et les affichent.

    Exemple :

    2 factures, une simple et une concernant des rénovations effectués en mars.

    noFacture noBatiment nomBatiment noRenovation dateRenovation
    1---------2----------Villa--------------------------------------
    2---------3----------Immeuble----1-------------13.03.06------

  4. #4
    Membre régulier Avatar de anto
    Inscrit en
    Juin 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 86
    Points : 84
    Points
    84
    Par défaut
    si ta facture 2 a pls renovations tu veux que ca t affiche quoi?

  5. #5
    Membre régulier Avatar de Miles Raymond
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 189
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par anto
    si ta facture 2 a pls renovations tu veux que ca t affiche quoi?
    Une seule facture ne peux avoir qu'un seule rénovation. Comme ça m'affiche chaque facture, si un seul bâtiment à 5 rénovations, il y aura 5 factures avec 5 numéros de facture différents.

  6. #6
    Membre régulier Avatar de anto
    Inscrit en
    Juin 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 86
    Points : 84
    Points
    84
    Par défaut
    tu peut me montrer ta requete stp

  7. #7
    Membre régulier Avatar de Miles Raymond
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 189
    Points : 83
    Points
    83
    Par défaut
    Voilà une requête de teste qui choisi uniquement les factures du client 5584.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select batiments.noBatiment, batiments.nomBatiment, renovations.noRenovation,renovations.dateRenovation,
    factures.noFacture,factures.date,factures.noClients,factures.noBatiment 
    from renovations
    FULL OUTER JOIN factures on renovations.noRenovation = factures.idRenovation
    FULL OUTER JOIN batiments on factures.idBatiment = batiments.noBatiment 
    WHERE factures.noClient = '5584'
    Et là il me sélectionne toutes les factures de ce client, me les affichent toutes de manière correct. Seul problème : il n'affiche ni le noRenovation, ni la dateRenovation lors d'un facture de renovation...

  8. #8
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Citation Envoyé par Miles Raymond
    Avec des INNER JOINT le problème est qu'à chaque sélection du noRenovation et de la date il me sélectionne la facture,etc.. Par exemple il me sélectionne tout ça 4 fois si 4 rénovations ont eu lieu !
    Utilise plutôt factures LEFT OUTER JOIN renovations...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  9. #9
    Membre régulier Avatar de Miles Raymond
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 189
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par GrandFather
    Bonjour,

    Utilise plutôt factures LEFT OUTER JOIN renovations...
    En fait comme tu peux le voir dans le post au-dessus j'utilise FULL OUTER JOIN. Mon problème reste toujours ouvert...

  10. #10
    Membre régulier Avatar de Miles Raymond
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 189
    Points : 83
    Points
    83
    Par défaut
    Bon ben la faute venait de moi. Je faisait un lien avec le faux champ dans ma table facture (idRenovation alors que c'était noRenovation). Désolé du dérangement

    Merci à tout ceux qui ont essayés de m'aider !

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

Discussions similaires

  1. Requète SELECT avec conditions
    Par cdelamarre dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/06/2008, 11h46
  2. Requête SQL avec condition
    Par charlix dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2008, 11h38
  3. [MySQL] requête mysql avec condition à élaborer à partir d'un tableau
    Par taffMan dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/06/2007, 09h18
  4. Requête Access avec condition IIF
    Par SuperNav77 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/01/2007, 22h54
  5. [MySQL] concaténer une requête sql avec condition
    Par maliak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/02/2006, 12h01

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