2010-04-05 15 views
9

jest jakiś sposób, aby uniknąć używania tabeli tmp?jak dołączyć zestaw wyników zapytania do istniejącej tabeli?

Używam kwerendy z funkcji zbiorczej (suma), aby wygenerować sumę każdego produktu: wynik wygląda tak:

product_name | sum(qty) 
product_1 | 100 
product_2 | 200 
product_5 | 300 

teraz chcę dołączyć powyższy rezultat do innej tabeli o nazwie produktów . tak, że będę mieć podsumowanie takiego:

product_name | sum(qty) 
product_1 | 100 
product_2 | 200 
product_3 | 0 
product_4 | 0 
product_5 | 300 

wiem 1 sposobem osiągnięcia tego celu jest wysypisko 1st wyniku zapytania do tabeli temp następnie dołączyć go z produktami tabeli. czy istnieje lepszy sposób?

+3

mógłbyś podać kilka przykładów, dzięki czemu możemy pomóc? –

+0

Używam zapytania z funkcją agregującą (sumą) do wygenerowania sumy każdego produktu: Wynik wygląda następująco: product_name | suma (qty) product_1 | 100 product_2 | 200 product_5 | 300 teraz chcę dołączyć do powyższego wyniku do innej tabeli o nazwie produkty. tak, że będę miał podsumowanie takie jak to: product_name | suma (qty) product_1 | 100 product_2 | 200 product_3 | 0 product_4 | 0 product_5 | 300 Wiem 1 sposób zrobienia tego to zrzucenie pierwszego wyniku zapytania do tabeli tymczasowej, a następnie połączenie go z tabelą produktów. czy istnieje lepszy sposób? – Yang

Odpowiedz

24
SELECT Product_Name, Total FROM ProductTable x 
LEFT OUTER JOIN (SELECT SUM(qty) as Total, ProductID FROM InventoryTable 
    GROUP BY ProductID) y 
ON x.ProductID = y.ProductID 
+0

Założę się, że miałeś mieć 'GROUP BY ProductId' w podzapytaniu. – Powerlord

+0

@OMG: Naprawiono, dzięki. – egrunin

1

Możesz wykonać wiele złączeń w jednym zapytaniu select. Czy to rozwiązuje twój problem? Trudno powiedzieć, o co prosisz.

2

Można to zrobić następująco

select table1.productname, virtualtable.qty 
from table1 
inner join (
    select productid, qty 
    from table2 
    group by productid 
) as virtualtable on virtualtable.productid = table1.productid 
Powiązane problemy