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.
- Rejestracja:ponad 7 lat
- Ostatnio:ponad rok
- Postów:61
0
- Rejestracja:ponad 7 lat
- Ostatnio:ponad rok
- Postów:61
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

- Rejestracja:prawie 6 lat
- Ostatnio:około godziny
- Postów:1002
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.
edytowany 1x, ostatnio: Spearhead
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
GROUP BY id_klasa, id_data
?