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 :

Division dans une requête


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut Division dans une requête
    Bonjour à tous,

    bon ça fait quelques heures que je suis sur le forum à la recherche d'une solution à mon problème: je souhaiterais diviser la valeur d'un champ avec la valeur d'un même champ par exemple
    mat rub montant date
    154 450 54587   012000
    154 452 547     012000
    154 654 54      012000
    je cherche à afficher
    mat  montant         date
    154  54587/547       012000
    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,


    quelle règle avez-vous appliqué pour obtenir le résultat ?
    Y a aucune logique dans la demande.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    pour la rub 450 on a un montant1 et la rub 452 on a montant2 alors je voudrais faire montant1/montant2 pour même date 012000

    mat rub montant date
    154 450 54587   012000
    154 452 547     012000
    154 450 54789   022000
    154 452 544     022000
    j’obtiens

    154 54587/ 547   012000
    154  54789/544   022000

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 138
    Par défaut
    C'est déjà beaucoup plus clair.

    Qu'as-tu déjà essayé comme requêtes ?
    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 éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    je vous montre ma tentative mais ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mat,
     sum(case when rub = '450' then montant end) AS montant1/sum(case when rub = '452' then montant end) AS montant2
    from table 
    group by  date

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 138
    Par défaut
    Citation Envoyé par minooo Voir le message
    ça marche pas
    C'est un peu court comme description du problème.
    Il y a un message d'erreur ? Lequel ?
    Le résultat n'est pas celui attendu ? Pourquoi ?
    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.

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    le group by est foireux par rapport au select.

    http://sqlpro.developpez.com/cours/sqlaz/ensembles/

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    j'ai modifié la requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select t1.mat,t1.norub, t1.mt_mois/t2.mt_mois 
    from table t1 ,table t2 
    where t1.mat=t2.mat
    and t1.rub='450' 
    and t2.rub='452' 
    and t1.exercice='2000' 
    and t1.date_eff='200002'
    and t1.mat = '44252C'
    mais j'ai plusieurs résultat au lieu qu'un seul

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 138
    Par défaut
    Et est-ce que cela ne suffirait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  mat
        ,   SUM(CASE rub WHEN '450' THEN montant END) / SUM(CASE rub WHEN '452' THEN montant END) AS montant2
        ,   "date"
    FROM    matable 
    GROUP BY mat
        ,   "date"
    ;
    date est un mot clé du langage SQL et ne devrait pas être utilisé pour nommer un objet.
    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.

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    round (SUM(CASE WHEN  t.norub ='462' THEN t.mt_mois END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END) AS montant2 ,2)
        ,exercice,t.date_eff

    je voudrais arrondir résultat car j'ai comme résultat 2.00001 4.5444
    deux chiffre après la virgule mais message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    parenthèse droite absente

  11. #11
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Bonjour,

    L'alias de colonne doit être placé après l'expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    round (SUM(CASE WHEN  t.norub ='462' THEN t.mt_mois END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END),2)  AS MONTANT2

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    mais est ce que je suis obligé à chaque fois d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     round (SUM(CASE WHEN  t.norub ='462' THEN t.mt_mois END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END)*2,2) AS nbrmois
        ,round(SUM(CASE WHEN  t.norub ='462' THEN t.mt_mois END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END),2) AS taux
    pour avoir
    taux nbrmois
    1.5 3
    6 12

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    je voudrais bien finalisé mon problème

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    round(SUM(CASE WHEN  t.norub ='462'   THEN t.mt_mois  END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END)*2+1,2) AS nbrmois

    je voudrais ajouter si WHEN t.norub ='462' THEN t.mt_mois >0 alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    round(SUM(CASE WHEN  t.norub ='462'   THEN t.mt_mois  END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END)*2+1,2) AS nbrmois
    sinon AS nbrmois =1

  14. #14
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    je ne sais pas si vous m'avez compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     round (SUM(CASE WHEN  t.norub ='462' THEN t.mt_mois END) / SUM(CASE  WHEN t.norub= '460' THEN t.mt_mois END)*2,2) AS nbrmois
    dans ce cas si montant de la rubrique 462 pas null alors division mais je voudrais ajouter si le montant de la rubrique 462 est null alors nbrmois=1

  15. #15
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    pour le cas tu utilises la fonction decode

  16. #16
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 138
    Par défaut
    Ça s'écrit comme ça s'énonce...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ROUND(CASE SUM(CASE t.norub WHEN '462' THEN t.mt_mois END) WHEN 0 THEN 1 
        ELSE SUM(CASE t.norub WHEN '462' THEN t.mt_mois END) / SUM(CASE t.norub WHEN '460' THEN t.mt_mois END) * 2 END, 2) AS nbrmois
    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.

Discussions similaires

  1. division par 0 dans une requête donne #Erreur
    Par bugprog dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/05/2007, 10h57
  2. 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
  3. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 11h31
  4. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 02h59
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 14h51

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