2009-03-03 17 views
16

Mam kwerendę związkową w procedurze przechowywanej.TSQL - Suma kwerendy związkowej

co chciałbym zrobić, to suma kolumny i powrót tego zapytania do klienta

Jak to zrobić?

Malcolm

+0

Proponuję pisać kod TSQL –

Odpowiedz

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

Czy lepiej w ** jakikolwiek przypadek WYBRAĆ 'othercol1, othercol2, SUMA (bar)' zamiast 'othercol1, othercol2, bar' z wewnętrznego pod-zapytania & SUM ponownie w zapytaniu zewnętrznym np. jeśli zwrócone wiersze są zbyt liczne, tj. tysiące lub miliony? Lub SUMA() w wewnętrznej kwerendzie NIGDY nie będzie lepiej w każdym przypadku? – Medorator

+0

@buffer: miałby dwie operacje agregacji w wewnętrznej tabeli, zamiast jednego zewnętrznego agregatu. Mogłoby być lepiej. – gbn

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

Przy użyciu UNION uruchomieniu ryzyko nieprawidłowego wyniku („Unia”, gdy stosowane przez siebie = „unii odrębną”, który odfiltrowuje powielony wiersze), jeśli sumowanie jest znacznie bardziej prawdopodobne, że potrzebujesz wszystkich wierszy, tj. UNION ALL –

+0

@Used_By_Already - masz rację, to powinno być oczywiście UNION ALL. Poprawione. – Joe