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 :

Somme de lignes sur union : je sèche.


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Somme de lignes sur union : je sèche.
    Bonjour,
    Je sèche sur un pb classique, que j'ai bien dû résoudre par le passé ... mais là je souffre. Je suis sur SQL Server 2000.
    Voici le cas, je fais une union sur deux jeux de données provenant de la même table mais avec une ségrégation différente.

    La requete est la suivante :
    *****************************************
    select distinct
    sum(busycalls) as busycalls,
    sum(disccalls) as discalls,
    sum(abncalls) as abncalls,
    sum(incalls)as incalls
    from dvdn
    where row_date = '28/11/2005'
    and
    vdn in ('1244','1247','1248','1249','1250','1251','1285','1290')

    UNION ALL

    select
    sum(busycalls) as busycalls2,
    sum(disccalls) as disccalls2,
    sum(abncalls) as abncalls2,
    sum(incalls) as incalls2
    from dvdn
    where row_date = '28/11/2005'
    and
    vdn in ('1308','1312','1321','1325','1327','1329','1310','1331')
    *****************************************************

    Et j'obtiens cela, ce qui est juste :
    *****************************************************
    busycalls discalls abncalls incalls
    ----------- ----------- ----------- -----------
    22 0 6 506
    0 0 1 7
    ******************************************************

    Maintenant je souhaite le cumul de ces deux lignes (ex : abncalls = 6+1 ...etc ...).
    Mon souhait est de tout faire tenir en une instruction sql.
    J'ai bien essayé de passer par des tables temporaires et ça a l'air pas mal mais j'ai l'impression de me prendre la tête pour rien. Je sèche.
    Je vous remercie pour votre aide (et un coup de pied au cul ...).
    Vincent

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    et bien encapsule la requête dans une autre:
    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
     
     
    SELECT SUM(busycalls), SUM(discalls), SUM(abncalls), SUM(incalls)
     
    FROM (
     
    select distinct
    sum(busycalls) as busycalls,
    sum(disccalls) as discalls,
    sum(abncalls) as abncalls,
    sum(incalls)as incalls
    from dvdn
    where row_date = '28/11/2005'
    and
    vdn in ('1244','1247','1248','1249','1250','1251','1285','1290')
     
    UNION ALL
     
    select
    sum(busycalls) as busycalls,
    sum(disccalls) as disccalls,
    sum(abncalls) as abncalls,
    sum(incalls) as incalls
    from dvdn
    where row_date = '28/11/2005'
    and
    vdn in ('1308','1312','1321','1325','1327','1329','1310','1331') 
     
    )
    Remarque juste que j'ai changé les nom de la seconde requete
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne suis pas certain d'avoir compris la question, mais pour faire la simple somme, il suffit de fusionner les deux listes.

    Dans la requête ci-dessous, tu auras les deux sous-totaux et la somme totale.

    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
    SELECT Sum(CASE WHEN vdn in ('1244','1247','1248','1249','1250','1251','1285','1290') THEN busycalls ELSE 0 END) as busycalls, 
           Sum(CASE WHEN vdn in ('1244','1247','1248','1249','1250','1251','1285','1290') THEN disccalls ELSE 0 END) as discalls, 
           Sum(CASE WHEN vdn in ('1244','1247','1248','1249','1250','1251','1285','1290') THEN abncalls  ELSE 0 END) as abncalls, 
           Sum(CASE WHEN vdn in ('1244','1247','1248','1249','1250','1251','1285','1290') THEN incalls   ELSE 0 END) as incalls, 
           Sum(CASE WHEN vdn in ('1308','1312','1321','1325','1327','1329','1310','1331') THEN busycalls ELSE 0 END) as busycalls2, 
           Sum(CASE WHEN vdn in ('1308','1312','1321','1325','1327','1329','1310','1331') THEN disccalls ELSE 0 END) as discalls2, 
           Sum(CASE WHEN vdn in ('1308','1312','1321','1325','1327','1329','1310','1331') THEN abncalls  ELSE 0 END) as abncalls2, 
           Sum(CASE WHEN vdn in ('1308','1312','1321','1325','1327','1329','1310','1331') THEN incalls   ELSE 0 END) as incalls2, 
           Sum(busycalls) as busycallstotal, 
           Sum(disccalls) as discallstotal, 
           Sum(abncalls)  as abncallstotal, 
           Sum(incalls)   as incallstotal
    FROM   dvdn 
    WHERE  row_date = '28/11/2005' 
      AND  vdn in ('1244','1247','1248','1249','1250','1251','1285','1290', 
                   '1308','1312','1321','1325','1327','1329','1310','1331')
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par ze_key
    et bien encapsule la requête dans une autre:
    ...
    Remarque juste que j'ai changé les nom de la seconde requete
    Exact ! rolala le boulet que je suis moi quand j'abuse du champagne ...
    Merci à vous deux pour ces réponses.
    Vincent

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si c'est juste la somme, pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select sum(busycalls) as busycalls, 
           sum(disccalls) as discalls, 
           sum(abncalls) as abncalls, 
           sum(incalls)as incalls 
    from dvdn 
    where row_date = '28/11/2005' 
      and vdn in ('1244','1247','1248','1249','1250','1251','1285','1290',
                  '1308','1312','1321','1325','1327','1329','1310','1331')
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

Discussions similaires

  1. [SQL] Somme en ligne sur un nombre variable de colonnes
    Par mariem84 dans le forum SAS Base
    Réponses: 7
    Dernier message: 11/10/2013, 16h01
  2. [XL-2007] Somme avec multicritères sur colonne+ligne
    Par jrc11 dans le forum Excel
    Réponses: 2
    Dernier message: 03/10/2010, 22h42
  3. [MySQL] Somme de lignes sur un champ
    Par aiss57 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 04/05/2009, 22h23
  4. Somme de lignes d'une union de requête
    Par totoranky dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/07/2007, 10h22
  5. Conseil pour somme sur union
    Par maysa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/05/2007, 14h21

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