Wpis z mikrobloga

Miki.
Wyciągam sprzedaż klientów w każdej grupie towarowej.
Za pomocą naturalnych joinów. Zagregowane to jest za pomocą 'group by' do klienta, grupy pokazana suma z wartości.

Jeśli nastąpiła sprzedaż w danej grupie towarowej - zobaczę wynik sumę wartości. Jeśli sprzedaż w danej grupie nie nastąpiła - wartość nie pojawi się.

Jak pokazać wszystkich klientów i dla każdego z nich sprzedaż w każdej grupie bez względu na to czy ona nastąpiła czy nie?


#sql #oracle
  • 9
  • Odpowiedz
@paki81: ?
chyba myślałeś o right join, ale on spowoduje pojawienie się grup towarowych, których nie ma w tabeli sprzedaży - nie przyporzadkuje kazdej nieistniejącej do danego klienta
  • Odpowiedz
@Ginden: left join pokaże te transakcje, które nie mają przypisanej grupy.
A ja chce pokazać tych klientów, którzy nie mają transakcji w danej grupie.

należałby zastosować right join towary
Jednak w tym przypadku agregacji pojawią sie grupy towarowe, w których nikt nic nie kupił.
  • Odpowiedz
@Supaplex: brzydkie i pewnie mało efektywne ale nie mam czasu dłubać dłużej :)

select kli_id,grupa,SUM(wartosc) AS wartosc
from
(select *
from tmp_tow t, tmp_sprz s
where t.tow_id = s.tow_id
union
select t.tow_id, grupa, kli_id, s.tow_id, 0
from tmp_tow t, tmp_sprz s
where t.tow_id != s.tow_id)
group by kli_id,GRUPA;
  • Odpowiedz