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

Bases de données Delphi Discussion :

[D6] requête sql


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut [D6] requête sql
    Bonjour,

    Voici une requête qui porte sur trois tables,
    qui fonctionne, si je l'écris ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Select distinct
           sum( ver.ver_somme) as VERSE
     
    from   t_individu_ind ind,
           t_inscription_ins ins,
           t_versement_ver ver
     
    where ins.ins_ind_id =ind.ind_id
          and ver.ver_ind_id =ins.ins_ind_id
          and ver.ver_valid='OUI'
     
    ORDER by IND.ind_nom;
    qui fonctionne encore dans cette 2ème version
    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 distinct
           ind.ind_nom,
           ind.ind_prenom,
           ins.ins_ind_id,
           (ins.INS_VAL_LIC+INS.INS_VAL_COT)AS DU,
           ver.ver_valid
    from   t_individu_ind ind,
           t_inscription_ins ins,
           t_versement_ver ver
     
    where ins.ins_ind_id =ind.ind_id
          and ver.ver_ind_id =ins.ins_ind_id
          and ver.ver_valid='OUI'
     
    ORDER by IND.ind_nom;
    Et qui ne fonctionne plus, si je demande tout ensemble (ce que je souhaite) erreur : colonne de référence ?
    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
    Select distinct
           ind.ind_nom,
           ind.ind_prenom,
           ins.ins_ind_id,
           (ins.INS_VAL_LIC+INS.INS_VAL_COT)AS DU,
           ver.ver_valid,
           sum( ver.ver_somme) as VERSE
     
    from   t_individu_ind ind,
           t_inscription_ins ins,
           t_versement_ver ver
     
    where ins.ins_ind_id =ind.ind_id
          and ver.ver_ind_id =ins.ins_ind_id
          and ver.ver_valid='OUI'
     
    ORDER by IND.ind_nom;
    Quelqu'un pourrait-il m'indiquer mon erreur,
    Merci d'avance,
    Lucien

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    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
     
    Select distinct
           ind.ind_nom,
           ind.ind_prenom,
           ins.ins_ind_id,
           (ins.INS_VAL_LIC+INS.INS_VAL_COT)AS DU,
           ver.ver_valid,
           sum( ver.ver_somme) as VERSE
     
    from   t_individu_ind as ind inner join  
                (t_inscription_ins ins inner join
                  t_versement_ver ver                           
                on ver.ver_ind_id =ins.ins_ind_id)
              on ins.ins_ind_id =ind.ind_id 
    where ver.ver_valid='OUI'
     
    ORDER by IND.ind_nom;
    Essaie comme ça
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre expérimenté
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Par défaut
    SGBD ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    J'ai ôter le AS dans la première ligne de FROM..une coquille surement que le compliteur refuse.

    Toujours le même message
    Invalid token.
    Dynamic SQL Error.
    SQL error code = -104.
    invalid column reference.
    Merci de ton aide

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    firebird 1
    Désolé pour l'omission.

  6. #6
    Membre expérimenté
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Par défaut
    peut etre un problème d'agrégation avec le sum.

    Retire le distinct et met a la place un group by avec les champs ind.ind_nom,
    ind.ind_prenom,
    ins.ins_ind_id,

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    J'ai refait les mêmes tests avec la version de Malatar,
    même réponse que dans mes simulations sous IBEXPERT.

    Le group by proposé par Eric.H ne résout pas la difficulté, même message d'erreur...

  8. #8
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    Bonjour,
    je ne sais pas si tu peux faire une requête du style :
    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
    19
    20
    21
    22
    23
    24
    25
     
    Code: 
    Select distinct 
           ind.ind_nom, 
           ind.ind_prenom, 
           ins.ins_ind_id, 
           (ins.INS_VAL_LIC+INS.INS_VAL_COT)AS DU, 
           ver.ver_valid, 
           a.VERSE 
     
    from   t_individu_ind ind, 
           t_inscription_ins ins, 
           t_versement_ver ver,
          (select  ver_ind_id,
            sum( ver.ver_somme) as VERSE
               from ver
             where ver_valid = 'OUI'
             group by ver_ind_id) a
     
    where ins.ins_ind_id =ind.ind_id 
          and ver.ver_ind_id =ins.ins_ind_id 
          and ver.ver_valid='OUI' and
           a.ver_ind_id = ver.ver_ind_id 
     
    ORDER by IND.ind_nom;

  9. #9
    Membre expérimenté
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Par défaut
    Je me trompe peut être mais dès utilisation de SUM,MIN,MAX... il faut un group by (du moins avec mssql), a part s'il n'y que cela dans la requete

    En simulant avec mes propres base sous MSSQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select distinct client.nom_client, 
      cli_inci.Date_incident,  
      (cli_inci.Date_incident+100) as DU,
      sum( commande.type_port)
    from client, cli_inci, commande
    where client.numero_client=cli_inci.numero_client
      and commande.code_client=client.numero_client
    order by client.nom_client
    La requete fonctionne si on retire le sum. Avec le sum j'ai l'erreur suivante :
    Serveur : Msg 8118, Niveau 16, État 1, Ligne 1
    La colonne 'client.NOM_CLIENT' est incorrecte dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation et qu'il n'y a pas de clause GROUP BY.
    Serveur : Msg 8118, Niveau 16, État 1, Ligne 1
    La colonne 'cli_inci.DATE_INCIDENT' est incorrecte dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation et qu'il n'y a pas de clause GROUP BY.
    Serveur : Msg 8118, Niveau 16, État 1, Ligne 1
    La colonne 'cli_inci.DATE_INCIDENT' est incorrecte dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation et qu'il n'y a pas de clause GROUP BY.

    En mettant un group by :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select client.nom_client, 
      cli_inci.Date_incident,  
      (cli_inci.Date_incident+100) as DU,
      sum( commande.type_port)
    from client, cli_inci, commande
    where client.numero_client=cli_inci.numero_client
      and commande.code_client=client.numero_client
    group by client.nom_client, cli_inci.Date_incident
    order by client.nom_client
    LA requete fonctionne sans problème

    Autre slutions avec distinct et select imbriqué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select distinct client.nom_client, 
       cli_inci.Date_incident,  
      (cli_inci.Date_incident+100) as DU,
      (select sum(type_port) from commande 
       where commande.code_client=client.numero_client
      )
    from client, cli_inci
    where client.numero_client=cli_inci.numero_client
    order by client.nom_client

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Désoler j'ai aps fait gaffe au Sum, il faut un group by dans la requete avec un sum

    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
     
    Select distinct
           ind.ind_nom,
           ind.ind_prenom,
           ins.ins_ind_id,
           (ins.INS_VAL_LIC+INS.INS_VAL_COT)AS DU,
           ver.ver_valid,
           sum( ver.ver_somme) as VERSE
     
    from   t_individu_ind as ind inner join 
                (t_inscription_ins ins inner join
                  t_versement_ver ver                           
                on ver.ver_ind_id =ins.ins_ind_id)
              on ins.ins_ind_id =ind.ind_id
    where ver.ver_valid='OUI'
    Group by  ind.ind_nom, ind.ind_prenom, ins.ins_ind_id,DU, ver.ver_valid
    ORDER by IND.ind_nom;
    Mais je pense qu'il va pas aimer le distinct avec le group by
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    Cette fois le DU ne lui plait pas ...
    Column does not belong to referenced table.
    Dynamic SQL Error.
    SQL error code = -206.
    Column unknown.
    DU.
    At line 15, column 56.

  12. #12
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    As tu testé ma solution ?

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par Lucien
    Cette fois le DU ne lui plait pas ...
    Column does not belong to referenced table.
    Dynamic SQL Error.
    SQL error code = -206.
    Column unknown.
    DU.
    At line 15, column 56.
    a la place de DU, dans le group by, marque 4 (le chiffre 4 pour 4em colonne)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    pour Iper, la syntaxe lui parait étrangère...?
    Invalid token.
    Dynamic SQL Error.
    SQL error code = -104.
    Token unknown - line 29, char 8.
    select.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    A malatar
    la place de la colonne ne plait pas davantage
    Invalid token.
    Dynamic SQL Error.
    SQL error code = -104.
    Token unknown - line 15, char 56.
    4.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    A Malatar,
    si je supprime seulement la colonne DU, avec group by,
    le fonctionnement est correct...mais évidemment, ce n'est pas ce qu'il me faut...

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    Voici la réponse à la 2ème solution proposée par Eric.H
    l'analyseur ne semble pas connaître cette solution...
    Invalid token.
    invalid request BLR at offset 151.
    context already in use (BLR error).

  18. #18
    Membre expérimenté
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Par défaut
    Citation Envoyé par Lucien
    Voici la réponse à la 2ème solution proposée par Eric.H
    l'analyseur ne semble pas connaître cette solution...
    Invalid token.
    invalid request BLR at offset 151.
    context already in use (BLR error).
    C'est pourtant simple comme requete ... bizarre

  19. #19
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par Lucien
    A Malatar,
    si je supprime seulement la colonne DU, avec group by,
    le fonctionnement est correct...mais évidemment, ce n'est pas ce qu'il me faut...
    Je n'ai aps dit de supprimer DU dans le group by, mais de remplacer par 4 (4 etant sa position dans l'ordre des colonne de ta requete)

    Sinon dans le group by à la palce de DU mettre le calcul que tu fais)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 84
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2002
    Messages : 172
    Par défaut
    Merci à chacun d'entre vous d'avoir passer un moment avec moi,
    cette fois-ci le code fonctionne correctement:
    conclusions
    0) le numéro de la colonne n'intervient pas dans ce cas.
    1) le DISTINCT ne gène pas
    2) il faut un GROUP BY, quand SUM est accompagné d'autres colonnes
    3) on doit répéter le nom de toutes les colonnes dans le GROUP BY
    Encore Merci,
    Lucien

    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
     
    Select distinct 
           ind.ind_nom, 
           ind.ind_prenom, 
           ins.ins_ind_id, 
           (ins.INS_VAL_LIC+INS.INS_VAL_COT)AS DU,
           ver.ver_valid, 
           sum( ver.ver_somme) as VERSE 
     
    from   t_individu_ind ind inner join
                (t_inscription_ins ins inner join 
                  t_versement_ver ver                            
                on ver.ver_ind_id =ins.ins_ind_id) 
              on ins.ins_ind_id =ind.ind_id 
    where ver.ver_valid='OUI' 
    Group by  ind.ind_nom, ind.ind_prenom, ins.ins_ind_id,ins.INS_VAL_LIC,INS.INS_VAL_COT,  ver.ver_valid
    ORDER by IND.ind_nom;

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

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 16h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 20h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 19h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 17h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 12h37

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