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

SQL Oracle Discussion :

Requête de calcul sur des champs avec une colonnes différente


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut Requête de calcul sur des champs avec une colonnes différente
    Salut tous le monde, es possible de réaliser une requête avec se résultat
    Nom : 2.png
Affichages : 225
Taille : 14,6 Ko

    SGBD : Oracle 8i.

    Merci à tous

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Oui c'est possible



    Si vous voulez une réponse utilisable, posez une question précise avec, la description de vos tables, un extrait de votre jeu de données en entrée et un exemple de résultat attendu

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Salut, le jeux de donnée et dans le tableau, une table de 5 champ, Période, Nature, Libelle, Débit et Crédit. je voudrais une requête qui fait la différence entre les champ Débit et Crédit et omis les période soldé, voici ma requête que j'ai réaliser sauf qu'il met impossible d'inclure le champ "LIBELLE". Si possible aussi le total du Débit et Crédit par Période ainsi que le total général. Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SubStr(t.Per,5,
        2)||SubStr(t.per,1,4) Periode t.nat, t.Per Period, Sum(
        t.Debit) - Sum(t.Credit) Debit FROM Compta t WHERE t.Numero =&Num1
        Having Sum(t.Debit) - Sum(t.Credit) <> 0 
        Group By t.Per, t.Nat
        Order By t.Per Desc, t.Nat

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par masterdash Voir le message
    le jeux de donnée et dans le tableau
    Le jeu de données est dans une image du tableau, ce n'est pas tout à fait la même chose quand on veut les recopier pour les insérer dans sa propre base de données pour tester la réponse donnée
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Salut voici se que vous avez demandé:

    PERIODE
    102016
    102016
    102016
    102016
    102016
    102016

    NATURE
    R01
    R02
    R03
    R01
    R02
    R03

    LIBELLE
    Regler N 889965
    Regler N 889965
    Regler N 889965
    Compta 1016
    Compta 1016
    Compta 1016

    DEBIT
    0,00
    0,00
    0,00
    12 456,00
    14 032,02
    4 088,56

    CREDIT
    10 220,00
    14 032,02
    4 088,56
    0,00
    0,00
    0,00

    Merci pour votre aide

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut Quand c'est lisible, on comprend mieux, merci lapalisse !
    Bonjour,

    Si vous aviez mis en forme votre requête, vous auriez certainement trouvé certaines erreurs par vous même.

    Voici votre requête mieux présentée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT SubStr(t.Per, 5,2 )||SubStr(t.per,1,4) Periode 
         , t.nat 
         , t.Per Period
         , Sum(t.Debit) - Sum(t.Credit) Debit 
    FROM Compta t 
    WHERE t.Numero =&Num1
    Having Sum(t.Debit) - Sum(t.Credit) <> 0 
    Group By t.Per, t.Nat
    Order By t.Per Desc, t.Nat
    On constate que :
    • il y a 3 colonnes non agrégées dans le select, mais 2 colonnes seulement dans le group by, d'où votre erreur
    • La clause "Group by" et la clause "having" sont inversées

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Salut, merci pour la réponse mais se que vous avez fait c'est une mise en forme de la requête, le problème de inclure le champ LIB dans la requête voir les images détailler.

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Il suffit de passer par une jointure entre les lignes de crédit et celles de débit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  dbt.periode
        ,   dbt.nature
        ,   dbt.libelle
        ,   dbt.debit
        ,   cdt.credit
        ,   (cdt.credit - dbt.debit)    AS  difference
    FROM    compta  dbt
        INNER JOIN
            compta  cdt
            ON  dbt.periode = cdt.peridoe
            AND dbt.nature  = cdt.nature
    WHERE   dbt.credit  = 0
        AND cdt.debit   = 0
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Merci pour la réponse, mais INNER JOIN ne marche pas sous ORACLE 8i, j'ai le SGBD utiliser dans le premier Poste

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Ce n'est pas très compliqué de convertir une jointure normalisée en restriction sur un produit cartésien...
    Pour rappel : Les jointures, ou comment interroger plusieurs tables
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Dans le résultat, quelle est la règle de gestion qui permet de conserver "compta 1016" plutôt que "Regler N 889965" ?

  12. #12
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Voici se que j'ai pu faire mais le résultat est faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  dbt.periode
        ,   dbt.nature
        ,   dbt.libelle
        ,   dbt.debit
        ,   cdt.credit
        ,   (cdt.credit - dbt.debit)    AS  difference
    FROM    Compta dbt, Compta cdt        
    WHERE   dbt.Numro = &Num1
    And dbt.Numero = cdt.Numero
    And dbt.periode = cdt.periode
    AND dbt.nature  = cdt.nature
    And dbt.credit  = 0
        AND cdt.debit   = 0

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par masterdash Voir le message
    le résultat est faux
    En quoi le résultat est-il faux ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  14. #14
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Les période Soldé son inclus dans le résultat
    Vous pouvez me donnée la même requête sous Oracle 8i pour la comparer à la mienne Merci

  15. #15
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Salut, j'ai presque résolu mon problème sauf que en ajoutent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       AND cdt.debit = 0 And dbt.Credit = 0
    la requête devient lourd, voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT dbt.periode,
           dbt.nature,
           dbt.libelle,
           dbt.debit,
           cdt.credit,
           (cdt.credit - dbt.debit) AS difference
      FROM Compta dbt, Compta cdt
     WHERE dbt.Numero = &Num1
       And cdt.Numero = dbt.Numero
       And dbt.periode = cdt.periode
       AND dbt.nature = cdt.nature
       And dbt.Debit - cdt.Credit = 0
       AND cdt.debit = 0 And dbt.Credit = 0

  16. #16
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Citation Envoyé par masterdash Voir le message
    Salut, j'ai presque résolu mon problème sauf que en ajoutent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       AND cdt.debit = 0 And dbt.Credit = 0
    la requête devient lourd, voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT dbt.periode,
           dbt.nature,
           dbt.libelle,
           dbt.debit,
           cdt.credit,
           (cdt.credit - dbt.debit) AS difference
      FROM Linc.Secu_Ecr dbt, Linc.Secu_Ecr cdt
     WHERE dbt.Numero = &Num1
       And cdt.Numero = dbt.Numero
       And dbt.periode = cdt.periode
       AND dbt.nature = cdt.nature
       And dbt.Debit - cdt.Credit = 0
       AND cdt.debit = 0 And dbt.Credit = 0
    Ça veut dire quoi "la requête devient lourde" ?
    Lourde en exécution, en lecture, autre ?

  17. #17
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Citation Envoyé par masterdash Voir le message
    Salut, j'ai presque résolu mon problème sauf que en ajoutent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       AND cdt.debit = 0 And dbt.Credit = 0
    [/CODE]
    En ajoutant cette clause alors la ligne R01 ne pourra plus apparaître (Débit et crédit non-équilibrés) contrairement à votre résultat souhaité du premier post

  18. #18
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Lourd, la requête tourne sans résultat.

Discussions similaires

  1. TCD avec champ calculé sur des champs nombre
    Par Scrabblouille dans le forum Excel
    Réponses: 0
    Dernier message: 06/10/2011, 20h16
  2. Requête donnant la liste des champs d'une table
    Par laurentSc dans le forum Débuter
    Réponses: 2
    Dernier message: 16/02/2008, 21h08
  3. Réponses: 4
    Dernier message: 18/07/2007, 14h10
  4. Réponses: 6
    Dernier message: 12/09/2006, 08h42
  5. calcul sur des champs
    Par Tierisa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/01/2006, 12h55

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