+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Profil pro
    ARTISAN
    Inscrit en
    février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2012
    Messages : 17
    Points : 4
    Points
    4

    Par défaut select * from compta where sum = variable

    Bonjour,

    je m’explique:

    je recherche tous les enregitrements de ma base de donnée compta si la somme (goupé par piece) du debit ou du credit est egale a ma variable

    je suis parti sur:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT ID, ""DATE"", NCOMTE, COALESCE(LIBCOMPTE, ''), JOURNAL, COALESCE(NPIECE, ''), COALESCE(LIBOPER, ''),COALESCE(CREDIT, ''), COALESCE(DEBIT, '') 
     
    FROM COMPTABILITE 
     
    GROUP BY ""DATE"", NCOMTE, LIBCOMPTE, NPIECE, CREDIT, DEBIT
     
    HAVING ""DATE"" BETWEEN DATE1 and date2
     
     AND SUM(CREDIT) = VARIABLE OR SUM(DEBIT)  = VARIABLE
    est il possible de trouver cette requete?
    Quelqu'un a une idée?

  2. #2
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Bonjour

    Bon c'est pas gagné là ! Cette requête ne s'exécute certainement pas.
    Il me semble qu'il vous manque quelques notions de base du SQL. Cette remarque n'est pas un reproche bien entendu.

    Il existe sur la toile des tonnes d'articles et de tutoriels sur ce sujet. Donc...

    La requête (construite à la volée, sans test) pourrait être:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT
      C1.*
    FROM
      COMPTABILITE C1
    WHERE EXISTS (
      SELECT C2.ID, C2.NPIECE
      FROM COMPTABILITE C2
      WHERE
        C1.ID = C2.ID AND
        C2.MA_DATE BETWEEN :DATE1 AND :DATE2
      GROUP BY
        C2.ID,
        C2.NPIECE
      HAVING 
        SUM(C2.CREDIT) = :VALEUR OR SUM(C2.DEBIT) = :VALEUR
    )
    Je ramène toutes les colonnes de la table, à vous de sélectionner celles pertinentes.
    Vos COALESCE(F, '') me semble inutiles.
    Et enfin nommer une colonne DATE est à proscrire absolument, DATE est un mot-clé réservé du SQL.

    @+ Claudius
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  3. #3
    Invité de passage
    Profil pro
    ARTISAN
    Inscrit en
    février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2012
    Messages : 17
    Points : 4
    Points
    4

    Par défaut

    merci pour cette reponse rapide et desoler pour mon sql...
    je suis pas informatien je suis couvreur

    j'ai test la commande, elle marche mais elle ne retourne pas tout ce que je chercher:

    exemple

    piece debit credit
    a1 4.75
    a1 25.25
    a1 30

    je voudrai que ca me retourne les trois ligne car 4.75+25.25 = 30 et 30 = 30

  4. #4
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Citation Envoyé par vience Voir le message
    merci pour cette reponse rapide et desoler pour mon sql...
    je suis pas informatien je suis couvreur
    Raison de plus pour ne pas être désolé. Et pour inverser les rôles je me vois mal grimper sur mon toit en ardoise.

    Reprenons.
    Citation Envoyé par vience Voir le message
    j'ai test la commande, elle marche mais elle ne retourne pas tout ce que je chercher
    En théorie cette requête devrait vous renvoyer toutes les lignes.
    Je ne suis pas sûr de bien comprendre votre besoin.

    @+ Claudius.
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  5. #5
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 590
    Points : 10 964
    Points
    10 964
    Billets dans le blog
    3

    Par défaut

    Comme je préfère les CTE (cela dépend de la version de Firebird)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH SELECTION AS ( SELECT NPIECE
      FROM COMPTABILITE
      WHERE
        MA_DATE BETWEEN :DATE1 AND :DATE2
      GROUP BY   NPIECE
      HAVING 
        SUM(CREDIT) = :VALEUR OR SUM(DEBIT) = :VALEUR
     )
     
    SELECT C.* FROM COMPTABILITE C JOIN SELECTION S ON 
    C.NPIECE=S.NPIECE
    mais cela équivaut quasi au code de Cl@udius la seule différence est en fait dans la liaison entre C1 et C2 , Cl@udius l'a proposé sur l'id de l'écriture au lieu de la pièce donc le même code

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT
      C1.*
    FROM
      COMPTABILITE C1
    WHERE EXISTS (
      SELECT C2.NPIECE
      FROM COMPTABILITE C2
      WHERE
        C1.NPIECE = C2.NPIECE AND
        C2.MA_DATE BETWEEN :DATE1 AND :DATE2
      GROUP BY
        C2.NPIECE
      HAVING 
        SUM(C2.CREDIT) = :VALEUR OR SUM(C2.DEBIT) = :VALEUR
    )
    @Cl@udius non seulement tu n'es pas couvreur mais comme ton serviteur tu sembles porter à la 'com'ptabilité un intérêt d'informaticien
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  6. #6
    Invité de passage
    Profil pro
    ARTISAN
    Inscrit en
    février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2012
    Messages : 17
    Points : 4
    Points
    4

    Par défaut

    merci SergioMaster

    la première solution fonctionne parfaitement!

    j'espère que je vais pourvoir retrouver toute mes opérations!!!

    et encore merci a vous deux

  7. #7
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Citation Envoyé par vience Voir le message
    la première solution fonctionne parfaitement!
    ...
    et encore merci a vous deux
    Super

    @+

    @Serge
    @Cl@udius non seulement tu n'es pas couvreur mais comme ton serviteur tu sembles porter à la 'com'ptabilité un intérêt d'informaticien
    Tout ce qui couvre l'informatique m'intéresse.
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •