Złączenie dwóch tabel

0

Mam takie dwie tabele:

stawka
   0
   7
   10
   22   
Osoba   | Stawka | Suma
--------+--------+-------
Osoba1  |   0    |  123
Osoba1  |   22   |  345

Jak połączyć te dwie tabele aby uzyskać taki efekt ?

Osoba   | Stawka | Suma
--------+--------+-------
Osoba1  |   0    |  123
Osoba1  |   22   |  345
Osoba1  |   7    |  0
Osoba1  |   10   |  0

Czyli te wiersz w których stawka się zgadza, mają byc normalnie wyświetlone, a te stawki których w drugie tabeli nie ma, dodały się ?
Każda osoba ma być wyświetlona tyle razy, ile jest stawek w pierwszej tabeli.

0

Rozwiązanie sprawdzone na SQL Server 2005:

select tmp.Osoba, tmp.Stawka, IsNull(o.Suma, 0) as Suma
from
  Osoby o
right join
  (select o.Osoba, s.Stawka
   from (select distinct Osoba from Osoby) o
   cross join Stawki s) tmp 
on o.Osoba = tmp.Osoba and o.Stawka = tmp.Stawka
order by tmp.Osoba, tmp.Stawka
0
select o.osoba, s.stawka, o.suma from stawki s
left join osoba o on s.stawka = o.stawka;

z tym, że w o.suma musisz zamienić null na 0 a jak to już od bazy zależy - isnull w MSSQL nvl w oraclu

0
Misiekd napisał(a)
select o.osoba, s.stawka, o.suma from stawki s
left join osoba o on s.stawka = o.stawka;

z tym, że w o.suma musisz zamienić null na 0 a jak to już od bazy zależy - isnull w MSSQL nvl w oraclu

Niestety Twoje rozwiązanie nie da oczekiwanych wyników. Nie uzyskasz w ten sposób rekordów:
Osoba 1, stwaka 7, suma 0
Osoba 1, stawka 10, suma 0

0

sprawdziłeś, czy się domyślasz?

0
Misiekd napisał(a)

sprawdziłeś, czy się domyślasz?

Nie muszę sprawdzać działania tak prostych mechanizmów jak LEFT JOIN żeby wiedzieć jaki będzie wynik.
Ale dla Ciebie poświęciłem te kilka minut i oto resultat:

Twoje zapytanie generuje następujące wyniki (już po użyciu IsNull dla kolumny suma):

Osoba   | Stawka | Suma
--------+--------+-------
NULL    |   7    |  0
NULL    |   10   |  0
Osoba1  |   0    |  123
Osoba1  |   22   |  345

Moje zapytanie z pierwszego postu (z użyciem cross join) daje:

Osoba   | Stawka | Suma
--------+--------+-------
Osoba1  |   0    |  123
Osoba1  |   7    |  0
Osoba1  |   10   |  0
Osoba1  |   22   |  345

, a więc to czego oczekiwał autor.

Różnica jest chyba wyraźna.

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