Cross join

0

Witam wszystkich, mam następujący problem. Chciałbym z podanej tabeli:
id id_klasa id_data wartosc
1 1 201801 3
2 1 201802 4
3 2 201801 2
4 2 201802 5
5 2 201803 6
6 2 201804 3
7 2 201805 2
8 2 201806 5
9 3 201801 1
10 3 201802 3
11 3 201803 1
otrzymać następujący wynik, że dla każdego id_klasa i id_data mieć wartość tzn. jeśli po prostu dla id_klasa = 1 i id_data = 201803 nie ma wartości to chciałbym otrzymać wartość null. Dla trzech id_klasa i 6 id_data łącznie 18 rekordów z wartościami (w tym null). Czy da się coś takiego osiągnąć? Wydaje mi się, że jak sobie stosuję cross joina to jestem blisko.

0

Tak, cross join id_klasa z id_data, left outer z oryginalna tabela i group by na koniec.

0
ralf napisał(a):

Tak, cross join id_klasa z id_data, left outer z oryginalna tabela i group by na koniec.

Nie za bardzo wiem, jak to osiągnąć, bo otrzymuję teraz dokładnie 18 rekordów, ale wartości są takie same dla jednej klasy

0
select t2.id_klasa, t2.id_data, t1.wartosc from test as t1 right join(
  select distinct st1.id_klasa, st2.id_data from test as st1 cross join test as st2
) as t2 on t1.id_klasa = t2.id_klasa and t1.id_data = t2.id_data;

http://sqlfiddle.com/#!17/77f73/10/0

Troche dużo tych joinów, może da się prościej.

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