2012-08-02 7 views
5

mam dwie tabele, table A:Wyświetl rekordy z boku dwie tablice dopasowując bocznej tylko niektóre z dziedzin

Customer_ID Product Date Of Sale Pay Meth 1 Pay Meth 2 QTY 
----------- ------- ------------ ---------- ---------- --- 
     123 AB  1/1/2012    111   222 1 
     123 AB  1/1/2012    111   222 1 
     456 AC  2/1/2012    333   444 1 

i table B:

Customer_ID Product Date Of Sale Pay Meth 1 Pay Meth 2 QTY 
----------- ------- ------------ ---------- ---------- --- 
     123 AB  1/1/2012    111   222 2 
     456 AB  1/1/2012    124   111 1 

Chcę dopasować dane w taki sposób, rekord dla klienta 123 w table A jest zgrupowany jako:

Customer_ID  Product  Date Of Sale  Pay Meth 1  Pay Meth 2  QTY 
-----------  -------  ------------  ----------  ----------  --- 
     123 AB  1/1/2012    111   222 2 

i na prawo od niej pojawia się następujący zapis z table B:

Customer_ID  Product  Date Of Sale  Pay Meth 1  Pay Meth 2  QTY 
-----------  -------  ------------  ----------  ----------  --- 
     123 AB  1/1/2012    111   222 2 

także (zawsze istnieje również) chcemy pokazać trzeci rekord w table A i na prawo od tego rekordu drugi rekord w table B (klient 456), ponieważ mają one taki sam Customer_ID, Product i Date of Sale

Tak powinno to wyglądać mniej więcej tak

Customer_ID  Product  Date Of Sale  Pay Meth 1  Pay Meth 2  QTY Customer_ID  Product Date Of Sale  Pay Meth 1  Pay Meth 2  QTY 
-----------  -------  ------------  ----------  ----------  ---  -----------  -------  ------------  ----------  ----------  --- 
     123 AB  1/1/2012    111   222 1   123 AB  1/1/2012    111   222 1 
     456 AC  2/1/2012    333   444 1   456 AB  1/1/2012    124   111 1 
+0

Jak @AlexKalicki wskazuje produkt i termin ' 456' nie pasują między tabelami; czy to tylko błąd w pisaniu tego? Czy naprawdę chcesz, aby wszystkie pasujące kolumny były powtarzane? –

Odpowiedz

4

Można zrobić podzapytania na każdym stole, aby uzyskać Ilość sumy dla każdego klienta, a następnie dołączyć do wyników przez identyfikator klienta np

SELECT a.*, b.* 
FROM (
    Select customer_id, product, dateofsale, PayMeth1, PayMeth2, SUM(Qty) as Qty 
    from TableA 
    Group by customer_id, product, dateofsale, PayMeth1, PayMeth2 
) a 
JOIN (
    Select customer_id, product, dateofsale, PayMeth1, PayMeth2, SUM(Qty) as Qty 
    from TableB 
    Group by customer_id, product, dateofsale, PayMeth1, PayMeth2 
) b 
ON a.customer_id = b.customer_id 
0

Czego szukasz polecenia SQL JOIN: http://www.tizag.com/sqlTutorial/sqljoin.php

że chcesz dołączyć do dwóch tabel tylko wiersze, gdzie kolumna (y) chcesz dopasować zrobić. Więc jeśli próbujesz dopasować rekordy z dwóch tabel opartych na customer_id następnie kod SQL będzie wyglądać mniej więcej tak:

SELECT * 
FROM A 
JOIN B 
ON A.Customer_ID = B.Customer_ID 

Nie wiem, co masz na myśli, kiedy mówisz te 2 rekordy mają ten sam identyfikator produktu, oraz Data sprzedaży - wydają się mieć wspólny identyfikator (456).

+0

To nie zajmuje się grupowaniem 'QTY' z' tabeli A'. –

+0

Dobra uwaga, nie zdawałem sobie sprawy, że to, co OP chciał zrobić przed edycją. Nie mogę wymyślić dobrego sposobu na zrobienie tego bez usunięcia jednego wpisu z tabeli i zaktualizowania drugiego z poprawną ilością. –

+0

Starałem się zobaczyć, co się dzieje, . Chciałbym zmienić 'z A' na' from (wybierz id, ... sum (qty) z grupy A według id, ...) A', więc dołączasz do podzapytania, które robi agregację. Nie mam teraz czasu na napisanie wypracowanego przykładu. –

Powiązane problemy