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 :

Total dans requête sql


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut Total dans requête sql
    Bonjour,

    dans une requête sql qui se décompose en plusieurs requêtes, dans la requête finale qui affiche les résultats, j'ai une colonne total qui est une somme de 3 colonnes (où les informations sont mises dans 3 tables temporaires différentes) or si je n'ai pas de résultat dans la 3ème colonne , il ne fait pas le total

    La requête :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    select num numtab1, gam, nom, pre, dan, 
    '['||ser||'] '||slib service, 
    '['||ufo||'] '||ulib ufresult,dat, das, rss, grp 
    from tabh, tabp, tabser,tabu
    where and tabser.sermsi = 1  
    and ser in (PARAM3) 
    and tabp.pndo = tabh.hndo 
    and tabh.ser = tabser.cod 
    and tabh.ufo = tabu.ucod
    order by gam,das 
    into temp taberesult1
     
    select service,ufresult,count(*)nbsansdp from taberesult1
    group by 1,2
    into temp tab1;
     
    select nom,pre,dan,num,gam,rss,'['||ufo||'] '||ulib ufresult,'['||ser||'] '||slib service,dat,das 
    from tabh,tabp,tabser,tabu
    where and tabp.pndo = tabh.hndo 
    and tabh.num not in (select nsj from tabrum)
    and tabh.num not in (select numtab1 from taberesult1)
    and das between PARAM1 and PARAM2 
    and ser in (PARAM3) 
    and tabh.ser = tabser.cod
    and tabh.ufo = tabu.ucod
    into temp taberesult2;
     
    select service,ufresult,count(*) nbsansnumrss from taberesult2
    group by 1,2
    into temp tab2;
     
     
    select nosej,numrss,'['||unite||'] '||ulib ufresult,'['||rser||'] '||slib service,entdat,sordat 
    from tabrum,tabser,tabu
    where sordat between PARAM1 and PARAM2 
    and tabrum.rser in (PARAM3) 
    and tabrum.rser = tabser.cod
    and tabrum.unite = tabu.ucod
    into temp taberesult3;
     
    select service,ufresult,count(*) nbavecnumrss from taberesult3
    group by 1,2
    into temp tab3;
    requete affichant le résultat final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select tab3.service,tab3.ufresult,tab1.nbsansdp,tab2.nbsansnumrss,tab3.nbavecnumrss,(tab1.nbsansdp+tab2.nbsansnumrss+tab3.nbavecnumrss) restotal, round((((tab1.nbsansdp+tab2.nbsansnumrss)/(tab1.nbsansdp+tab2.nbsansnumrss+tab3.nbavecnumrss))*100),2) pourcentage
    from outer(tab1),outer(tab2),tab3
    where tab1.ufresult=tab3.ufresult
    and tab2.ufresult=tab3.ufresult
    order by tab3.service;
    Voici le resultat que j'obtiens :

    [11] U [8227] DU 3 155
    [17] P [0425] HNLA 31
    [23] CG [4010] CGV 2 3 117 122 4,1
    [97] HSPC[4900] HSPC 4 130
    Comment je peux faire pour que dans RESTOTAL j'aie bien le total même si je n'ai pas d'informations dans la colonne tab1.nbsansdp ou dans la colonne tab2.nbsansnumrss ?
    merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    je dois avouer que j'ai du mal a saisir

    mais si je peux proposer de faire attention aux valeurs (totaux null)

    Null + quelque chose = null

    il faut donc remplacer le null par zéro avec la fonction NULLIF()

    mais je le répète, je ne suis pas sûr que ce soit là que se pose le problème parce que le tableau de résultats est curieux dans le nombre de colonnes en sortie

    U [8227] DU 3 155
    P [0425] HNLA 31
    CG [4010] CGV 2 3 117 122 4,1
    HSPC[4900] HSPC 4 130
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Le résultat est le suivant : (j'ai remplacé les blancs par des zéros) pour exemple la ligne [11]

    tab1.nbsansdp = 0
    tab2.nbsansnumrss = 3
    tab3.nbavecnumrss = 155

    restotal = 0 et moi je voudrais obtenir restotal = 158

    exemple pour la ligne [97]

    tab1.nbsansdp = 4
    tab2.nbsansnumrss = 0
    tab3.nbavecnumrss = 130

    restotal = 0 et moi je voudrais obtenir restotal = 134

    Comment puis-je faire ?
    merci pour votre aide

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    si les zéros sont bien présents, je ne vois pas de problème.....


    vous pourriez remettre les résultats affichés issus de la requête ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    non je n'ai pas de zéro dans le résultat de ma requête mais des blancs, (j'ai mis des zéros juste pour l'exemple dans mon post sur le forum) et c'est ce que j'essaye de faire dans ma requête, remplacer une valeur null par des zéros en essayant par ISNULL ou IFNULL mais ma requête ne fonctionne pas.
    Pour info, je travaille sur une base de donnée informix

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    je ne connais pas du tout informix


    essayes la fonction COALESCE qui une fonction standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Tab3.Service,
           Tab3.Ufresult,
           COALESCE(Tab1.Nbsansdp, 0),
           COALESCE(Tab2.Nbsansnumrss, 0),
           COALESCE(Tab3.Nbavecnumrss, 0),
           (COALESCE(Tab1.Nbsansdp, 0) + COALESCE(Tab2.Nbsansnumrss, 0) + COALESCE(Tab3.Nbavecnumrss, 0)) Restotal,
           ROUND((((COALESCE(Tab1.Nbsansdp, 0) + COALESCE(Tab2.Nbsansnumrss, 0)) / (COALESCE(Tab1.Nbsansdp, 0) + COALESCE(Tab2.Nbsansnumrss, 0) + COALESCE(Tab3.Nbavecnumrss, 0))) * 100), 2) Pourcentage
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut

    informix n'a pas l'air de connaitre
    COALESCE

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour

    et qu'en est-il de la fonction NULLIF ? existe-t-elle sous INFORMIX ?


    sinon, il pourrait être possible de passer au niveau de la requête qui calcule les sommes d'utiliser le CASE (cela existe ?)
    Merci d'ajouter un sur les tags qui vous ont aidé

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut

    et non pareil avec NULLIF

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    isnull(val, 0)

    nvl(val, 0)

    au cas où

    sinon, goto documentation informix
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    attention, ISNULL() renvoie 0 ou 1

    et ce type de syntaxe est il accepte ?
    (pour generer le 0 au niveau de la requete COUNT)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      SELECT Service,
             Ufresult,
             CASE
               WHEN COUNT(*) IS NULL THEN
                   0
               ELSE COUNT(*)
             END Nbsansdp
        FROM Taberesult1
        GROUP BY 1, 2
      INTO Temp Tab1;
    INTO Temp Tab1
    mais pourquoi creer des tables temporaires ? pourquoi ne pas utiliser des sous-requetes ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  12. #12
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    attention, ISNULL() renvoie 0 ou 1
    Ah ouais, c'est méchant ça

    Avec SQL Server, isnull(val1, val2) renvoie val1 si différent de null, sinon val2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select ISNULL(1, 12)
    -----------
    1
     
    select ISNULL(null, 12)
    -----------
    12
    On ne jouit bien que de ce qu’on partage.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    voila ce que je merite
    Merci d'ajouter un sur les tags qui vous ont aidé

Discussions similaires

  1. [MySQL] Introduire une variable dans requête SQL, insérer des données à la volée
    Par Ronan.f dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 29/04/2006, 22h10
  2. [VB6]Fonction dans requête SQL Access
    Par jean-pierre96 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/04/2006, 19h44
  3. TEdit.Text dans Requête SQL?!?
    Par zarbydigital dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2005, 09h37
  4. [Visual Web] [SJSC] Concaténation dans requête SQL
    Par Original Prankster dans le forum NetBeans
    Réponses: 22
    Dernier message: 15/08/2005, 14h50
  5. ASP et valeur NULL dans requêtes SQL
    Par chuck_m dans le forum ASP
    Réponses: 7
    Dernier message: 13/08/2004, 11h15

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