2009-03-03 10 views
16

J'ai une requête d'union dans une procédure stockée.TSQL - Somme une requête union

que je voudrais faire est la somme d'une colonne et retourner cette requête au client

Comment puis-je faire cela?

Malcolm

+0

Je vous suggère de poster votre code TSQL –

Répondre

33
SELECT 
    othercol1, othercol2, 
    SUM(bar) 
FROM 
    (
    SELECT 
     othercol1, othercol2, bar 
    FROM 
     RT 
    UNION ALL 
    SELECT 
     othercol1, othercol2, bar 
    FROM 
     FM 
    ) foo 
GROUP BY 
    othercol1, othercol2 
+1

Est-il préférable dans ** n'importe quel cas ** de sélectionner 'othercol1, othercol2, SUM (bar)' plutôt que 'othercol1, othercol2, bar' de la sous-requête interne & SUM à nouveau dans la requête externe, par exemple. si les lignes renvoyées sont trop nombreuses, c'est-à-dire des milliers ou des millions? Ou SUM() dans la requête interne ne sera jamais mieux dans tous les cas? – Medorator

+0

@buffer: il aurait 2 opérations globales dans la table interne, au lieu d'un agrégat externe. Ça pourrait être mieux. – gbn

4
SELECT SUM(MyCol) FROM 
(
SELECT ... MyCol FROM Table1 
UNION ALL 
SELECT ... MyCol FROM Table2 
)as tbl 
+1

Lorsque vous utilisez UNION vous courez le risque d'un résultat incorrect (« union » utilisé par lui-même = « union distincte » qui filtre dupliqué lignes), si vous faites une somme il est beaucoup plus probable que vous ayez besoin de toutes les lignes, par exemple UNION ALL –

+0

@Used_By_Already - vous avez raison, cela devrait être UNION ALL bien sûr. Corrigée. – Joe

Questions connexes