Nietypowe złączenie trzech tabel (MS SQL)

0

Mam dwie tabele:

tab1:
symbol
nazwa

tab2:
symbol
zapas
magazyn

pole "symbol" jest kluczem we wszystkich tabelach i można po nim robić złączenie. Rekordy w tab1 są unikalne, jest to słownik. W tab2 przechowywane są rekordy z zapisaną informacją o zapasie w poszczególnych magazynach.
Poniżej przykładowe dane:

tab1:
ab45|siekiera
zd35|piła
aa22|młotek

tab2:
ab45|12.000|M1
ab45|10.000|M2
zd35|50.000|M1
aa22|11.000|M2

Potrzebuję zrobić złączenia tych tabel aby otrzymać taki wynik:
tab1.symbol | tab1.nazwa | tab2.zapas where magazyn='M1' | tab2.zapas where magazyn='M2'
ab45 | siekiera | 12.000 | 10.000
zd35 | piła | 50.000 | null
aa22 | młotek | null | 11.000

W obrębie tab2 coś mi wychodzi ale nie wiem jak dodać tab1, a właściwie do tab1 dodać tab2.
To co wykombinowałem to:


FROM (SELECT symbol FROM tab2 GROUP BY symbol) AS u
LEFT JOIN tab2 p1 ON u.symbol = p1.symbol AND p1.magazyn = 'M1'
LEFT JOIN tab2 p2 ON u.symbol = p2.symbol AND p2.magazyn = 'M2'
order by SYMBOL```

Prośba o pomoc w ogarnięciu tematu.
0

Lol, ogarnij Case i zrobisz to na jednym inner joinie.

0

Wydaje mi się, że masz dobre to query. Jaki z nim jest problem?
Edit: aha, że nie umiesz pobrać nazwy? Normalnie

SELECT u.symbol, u.nazwa, ...
FROM tab1 u
LEFT JOIN itd.
-- bez group by
0
SELECT t1.symbol, t1.nazwa, CASE WHEN t2.magazyn = 'M1' THEN t2.zapas ELSE 0 END AS [zapas_m1], CASE WHEN t2.magazyn = 'M2' THEN t2.zapas ELSE 0 END AS [zapas_m2]
FROM tab1 as t1
INNER JOIN tab2 as t2 ON t2.symbol = t1.symbol

albo jeszcze inaczej:

SELECT t1.symbol, t1.nazwa, m1.zapas, m2.zapas
FROM tab1 as t1
INNER JOIN tab2 as m1 ON m1.symbol = t1.symbol AND m1.magazyn = 'M1'
INNER JOIN tab2 as m2 ON m2.symbol = t1.symbol AND m2.magazyn = 'M2'

P.S. Jeżeli w ostatnim zapytaniu chcesz widzieć symbol i nazwę nawet wtedy gdy nie ma stanu magazynowego zmień INNER JOIN na LEFT OUTER JOIN.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0