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 :

Soustraction request SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 72
    Points : 46
    Points
    46
    Par défaut Soustraction request SQL
    Bonjour et Bonne Année,

    Alors mon premier problème 2009 est le suivant :

    J'ai une requete sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select input_table.SERVICE, decode(input_table.CPT_INPUT,null,0,input_table.CPT_INPUT) - decode(output_table.CPT_VALO,null,0,output_table.CPT_VALO) as CPT3
    from
    (select SERVICE, sum(RECORDS) as CPT_INPUT 
    from XT_AUDIT
    where blablabla
    group by Service) input_table,
    (select service, sum(RECORDS) as CPT_VALO 
    from XT_AUDIT
    where blablabla
    group by service) output_table;
    Dans cette requete, j'ai un premier select qui me retourne un certain chiffre (ex : 3), dans le deuxième select, aucune ligne n'est retournée.
    Au final, je fais une soustraction du premier select moins le deuxieme select et devrait me retourné 3 comme valeur (dans l'exemple 3 - 'pas de ligne').

    Seulement le résultat présent dans l'insert final est 0, j'ai l'impression que le deuxième select foire la soustraction.

    Quand j'ai 'pas de ligne en résultat', je voudrais donc qu'il me mette '0' pour faire correctement la soustraction.

    Une idée ?

    Merci de votre aide

    gud une fois

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Points : 73
    Points
    73
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     - COALESCE(decode(output_table.CPT_VALO,null,0,output_table.CPT_VALO), 0)

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 72
    Points : 46
    Points
    46
    Par défaut
    Nan, désolé le résultat reste identique.

    J'ai tenté de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select SERVICE, sum(RECORDS) as CPT3
    from XT_AUDIT
    where blablabla
    minus
    select SERVICE, sum(RECORDS) as CPT3 
    from XT_AUDIT
    where blablabla;
    Cela fonctionne si le deuxième select retourne 'pas de ligne' mais dès lors qu'il retourne un certain nombre, la soustraction ne s'effectue pas (comme si ce deuxième select n'était jamais pris en compte).

    Merci de votre aide. bon courage

    Que c'est gud !!

  4. #4
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Au sujet du MINUS, voici ce que SQLpro m'a expliqué dernièrement:

    Citation Envoyé par SQLpro Voir le message
    Minus n'existe pas en SQL. C'est spécifique à Oracle. Pour la norme SQL c'est EXCEPT.
    Mais bon, ça ne fait pas avancer le shmilblick.
    Je me demande... Tu essaies d'obtenir en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sum(RECORDS) - sum(RECODRS) 
     
    Ex: 4 - 2
    ?

    Ca ne va pas marcher comme ça. Il ne va pas soustraire des valeurs mais il va conserver les valeurs qui ne se trouve pas dans le deuxième select.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select -> Service1, Service2, Service3, Service4, 10, 45
    select -> Service2, Service3, 10, 32
    
    Résultat: Service1, Service4, 45
    Il n'a pas affiché 0 après le Service4 et avant le 45. Il n'a pas fait 10-10 = 0.

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 72
    Points : 46
    Points
    46
    Par défaut
    Après avoir testé des fonctions isnull, ifnull, coalesce, nvl dans le select général, voila la réponse complètement tordue (pour moi en tout cas !!):

    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
     
    declare
      in_counter number := 0;
      out_counter number := 0;
    begin
      select sum(RECORDS) 
      into in_counter
      from XT_AUDIT
      where blablabla
     
      select sum(RECORDS)
      into out_counter
      from XT_AUDIT
      where blablabla
     
     
      INSERT INTO WRK_TDB_MP (CPT3)
      VALUES(nvl(in_counter, 0) - nvl(out_counter, 0));
     
      commit;
    end;
    /
    Bon courage et @ la prochaine

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 876
    Points
    12 876
    Par défaut
    Bonjour,
    Tu as une solution plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select sum(ifnull(somme1,0)),sum(ifnull(somme2,0)) from(
    SELECT sum(RECORDS) as Somme1,0 as somme2
    FROM XT_AUDIT
    WHERE blablabla
    union all
    SELECT 0,sum(RECORDS)
    FROM XT_AUDIT
    WHERE blablabla
    )
    Ou avec coalesce (même si je ne suis plus trop sur de la syntaxe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select sum(coalesce(somme1,0)),sum(coalesce(somme2,0)) from(
    SELECT sum(RECORDS) as Somme1,0 as somme2
    FROM XT_AUDIT
    WHERE blablabla
    union all
    SELECT 0,sum(RECORDS)
    FROM XT_AUDIT
    WHERE blablabla
    )
    Tatayo.

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

Discussions similaires

  1. mettre le resultat d'une request sql dans une variable
    Par vanesa dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 29/05/2008, 16h12
  2. List Menu + Request SQL select Distinct
    Par delavega dans le forum ASP
    Réponses: 1
    Dernier message: 01/04/2007, 22h23
  3. request sql, suivi d'un changement d'affichage de données ?
    Par chapeau_melon dans le forum Oracle
    Réponses: 6
    Dernier message: 14/03/2007, 08h18
  4. Une soustraction en sql?
    Par kissmytoe dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 14h52
  5. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28

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