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 :

Requete SQL en delphi


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Points : 52
    Points
    52
    Par défaut Requete SQL en delphi
    J'aimerais faire une requête SQL qui me permet de faire la somme, la différence en même temps .
    Voici la requête dont j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT Tpaiement.Num_Paiement, Tpaiement.Ref_Sinistre, Tpaiement.Date_Paye, Tpaiement.Montant, Tpaiement.Numero_Pièce, Tpaiement.Libelle, Tsinistre.Identifiant_Type, Tsinistre.Date_Survenue, Tsinistre.Provision_Initiale, Tsinistre.ADVERS, Tsinistre.OBS,(SELECT Tpaiement.Ref_Sinistre, Sum(Tpaiement.Montant) 
    FROM Tpaiement    
    GROUP BY Ref_Sinistre) As Somme_Total
    FROM Tpaiement,Tsinistre
    Where Tsinistre.Ref_Sinistre =Tpaiement.Ref_Sinistre
    AND     Tpaiement.Ref_Sinistre=:V_Ref_Sinistre
    Cette requete m'affiche une erreur qui est:''Une ligne simple de sous-requete a produit plus d'une ligne.
    En plus c'est une requete paramétrée qui a pour parametre''V_Ref_Sinistre''.
    Une fois que je choisis ce paramètre, elle refuse.
    Donc celui qui a une idée pour me permettre de réaliser cette requête serait la bienvenue.
    Quelqu'un pouvait il m'aider pour effectuer cette requête?
    Merci pour la compréhension.
    Par Zizou7.
      0  0

  2. #2
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Je ne suis pas sur d'avoir bien compris votre problème. Ou est la différence dont vous parlez ?

    Le problème vient d'ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (SELECT Tpaiement.Ref_Sinistre, Sum(Tpaiement.Montant) 
    FROM Tpaiement 
    GROUP BY Ref_Sinistre)
    renvoie plusieurs lignes.

    Vous pouvez essayer ceci (si j'ai plus ou moins bien compris):

    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 Tpaiement.Num_Paiement, 
    Tpaiement.Ref_Sinistre, 
    Tpaiement.Date_Paye, 
    Tpaiement.Montant, 
    Tpaiement.Numero_Pièce, 
    Tpaiement.Libelle, 
    Tsinistre.Identifiant_Type, 
    Tsinistre.Date_Survenue, 
    Tsinistre.Provision_Initiale, 
    Tsinistre.ADVERS, 
    Tsinistre.OBS, 
    SUM(Tpaiement.Montant) As Somme_Total
    FROM Tpaiement INNER JOIN Tsinistre 
    ON  Tpaiement.Ref_Sinistre = Tsinistre.Ref_Sinistre
    WHERE 
    Tpaiement.Ref_Sinistre = :V_Ref_Sinistre

    @+
      0  0

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Points : 52
    Points
    52
    Par défaut Requete SQL en delphi
    La question dont vous posée, voici comment j'ai écrit 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
    19
    20
     
    SELECT 
    Tpaiement.Num_Paiement,
    Tpaiement.Ref_Sinistre, 
    Tpaiement.Date_Paye, 
    Tpaiement.Montant, 
    Tpaiement.Numero_Pièce, 
    Tpaiement.Libelle, 
    Tsinistre.Identifiant_Type, 
    Tsinistre.Date_Survenue, 
    Tsinistre.Provision_Initiale,
    Tsinistre.ADVERS, 
    Tsinistre.OBS, 
    Somme_Totale,
    Provision_Initiale-Somme_Totale As Reste_à_payer 
    FROM 
    Tsinistre INNER JOIN Tpaiement (SELECT Ref_Sinistre, Somme_Totale=SumMontant)
    FROM Tpaiement
    GROUP BY Ref_Sinistre) Tpaiement ON Tpaiement.Ref_Sinistre=Tsinistre.Ref_Sinistre
    WHERE Tpaiement.Ref_Sinistre=:V_Ref_Sinistre
    Mais il m'affiche le message suivant:''Utilisation incorrect du mot clé SELECT''.
    Element de ligne 16.
    Je ne sais pas porquoi?
    Au sécour.
    Par Zizou7.
      0  0

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il vous manque des morceaux dans votre requête.
    Essayez ceci :
    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
    26
    SELECT 
        Tpaiement.Num_Paiement,
        Tpaiement.Ref_Sinistre, 
        Tpaiement.Date_Paye, 
        Tpaiement.Montant, 
        Tpaiement.Numero_Pièce, 
        Tpaiement.Libelle, 
        Tsinistre.Identifiant_Type, 
        Tsinistre.Date_Survenue, 
        Tsinistre.Provision_Initiale,
        Tsinistre.ADVERS, 
        Tsinistre.OBS, 
        TpaiementTOT.Somme_Totale,
        Provision_Initiale-TpaiementTOT.Somme_Totale As Reste_à_payer 
    FROM
        Tsinistre
        INNER JOIN Tpaiement
          ON Tpaiement.Ref_Sinistre=Tsinistre.Ref_Sinistre
        INNER JOIN
        (SELECT Ref_Sinistre, Sum(Montant) as Somme_Totale
         FROM Tpaiement
         GROUP BY Ref_Sinistre
        ) TpaiementTOT
          ON TpaiementTOT.Ref_Sinistre=Tsinistre.Ref_Sinistre
    WHERE
        Tpaiement.Ref_Sinistre=:V_Ref_Sinistre
      0  0

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Ton SGBD ?

    Je sais pas si le machin qui ressemble à une bind variable est une notation courante, mais supposons que tu es sous Oracle. Dans ce cas, tu as les fonctions analytiques qui te permettent justement d'avoir les résultats agrégés présents sur les lignes de détail.
    Le syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT function_agreg OVER(PARTITION BY TesColonnesDeGroupement)
    FROM ...
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Tpaiement.*, Provision_Initiale - sum(Montant) OVER(PARTITION BY Ref_Sinistre)
    FROM
        Tsinistre
        INNER JOIN Tpaiement
          ON Tpaiement.Ref_Sinistre=Tsinistre.Ref_Sinistre

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/
      0  0

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Points : 52
    Points
    52
    Par défaut Requete SQL en delphi
    Quand j'ai écrit le cidessus que vous m'avez donné, il m'ffiche le même message suivant:''Utilisation incorrete du clé SELECT''.
    Numero de ligne 20.
    Pourquoi?
    voici le code en question:
    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
    26
     
    SELECT 
    Tpaiement.Num_Paiement,
    Tpaiement.Ref_Sinistre, 
    Tpaiement.Date_Paye, 
    Tpaiement.Montant, 
    Tpaiement.Numero_Pièce, 
    Tpaiement.Libelle, 
    Tsinistre.Identifiant_Type, 
    Tsinistre.Date_Survenue, 
    Tsinistre.Provision_Initiale,
    Tsinistre.ADVERS, 
    Tsinistre.OBS, 
    TpaiementTOT.Somme_Totale,
    Provision_Initiale-TpaiementTOT.Somme_Totale As Reste_à_payer 
    FROM 
    Tsinistre 
    INNER JOIN Tpaiement
    ON Tpaiement.Ref_Sinistre=Tsinistre.Ref_Sinistre
    INNER JOIN
    (SELECT Ref_Sinistre, Sum(Montant) AS SommeTotale
    FROM Tpaiement
    GROUP BY Ref_Sinistre) Tpaiement
    ON Tpaiement.Ref_Sinistre=Tsinistre.Ref_Sinistre
    WHERE 
    Tpaiement.Ref_Sinistre=:V_Ref_Sinistre
    Par Zizou7.
      0  0

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Points : 52
    Points
    52
    Par défaut Requete SQL en delphi
    Je sais que vous avez du mal à comprendre mon problème, mais l'aide que vous m'apportez me permet de se former car je suis vraiment soulagé par vos aides. Un bon maître vos mieux qu'un bon livre.
    je reste toujours derrière vos conseilles.
    Je travaille en delphi7 et l'objet de requete est le Tquery dans sa propriété SQL que je mets le code et je l'appelle derrière le bouton executer par exemple.
    Voici par exemple le code que j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Qury.params.active:=false;
    Qury.params.paramValue['NomParametre']:=Nomedit.text;
    Qury.params.active:=True;
    J'écris ce code derrière le bouton executer par exemple.
    Pour les autres ça donne mais la requete dont nous faisons ne donne pas por le moment. Donc aidez moi à trouver la solution réelle à ce problème car c'est la seule requete qui me reste.
    Je suis à l'attente d'une reponse satisfaisante.
    Merci.
    Par Zizou7.
    NB: Ce qui me préoccupe est le code SQL qui permet de faire la requete en question.
      0  0

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Attention, tu donnes au SELECT d'agrégation l'alias TPaiement... qui est déjà un nom de table !

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/
      0  0

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Points : 52
    Points
    52
    Par défaut Requete SQL en delphi
    Voici le code que j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
            S.Ref_Sinistre,
            S.Provision_Initiale,
            P.Montant,
            S.Date_Survenue,
            P.Somme_Totale,
            Sum(Tpaiement.Montant)  AS  P.Somme_Totale,
            S.Provision_Initiale - P.Somme_Totale  AS  Reste_Payer       
    FROM Tsinistre S
               LEFT OUTER JOIN Tpaiement P
       ON  S.Ref_Sinistre=P.Ref_Sinistre
    WHERE EXTRACT(YEAR FROM S.Date_Survenue)=:ddate
    GROUP BY S.Ref_Sinistre
    Il m'affiche le message suivant:''Nom de champ incorrect "Somme_Totale" ''
      0  0

Discussions similaires

  1. Execution une requete Sql sur delphi
    Par koukitou dans le forum Débuter
    Réponses: 3
    Dernier message: 28/01/2015, 09h24
  2. variable dans requete SQL pour delphi
    Par socooooool dans le forum Bases de données
    Réponses: 9
    Dernier message: 25/01/2013, 11h27
  3. comment faire cette requete SQL en delphi
    Par rafikjka dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/01/2012, 15h42
  4. requete sql dans delphi 2006
    Par info007 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/04/2009, 09h32
  5. requete SQL sous delphi
    Par oasis dans le forum Bases de données
    Réponses: 18
    Dernier message: 10/06/2007, 18h23

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