Zapytanie agregujące

0

Witam

Mam problem z zapytanie i nie wiem jak go rozwiązać. Próbowałem już różnych sposobów, ale bez efektów.
Przyjmijmy, że mam tabelę Tab1, a w niej 4 rekordy:

Kol1 Kol2 Kol3
123 Adam Mickiewicz NULL
124 Bolesław Prus NULL
125 Henryk Sienkiewicz NULL
124 NULL Stefan Żeromski

Potrzebuję, aby w wyniku zapytania otrzymać 3 wiersze, z czego w wierszu dla Kol1 = 124 były uzupełnione wszystkie kolumny, czyli:

Kol1 Kol2 Kol3
123 Adam Mickiewicz NULL
124 Bolesław Prus Stefan Żeromski
125 Henryk Sienkiewicz NULL

Pozdrawiam
Darek

1
SELECT 
  Kol1, 
  COALESCE(Kol2), 
  COALESCE(Kol3)
FROM table
GROUP BY Kol1

PS: Trzeba dodać MAX(), bo COALESCE() nie agreguje

SELECT 
  Kol1, 
  MAX(COALESCE(Kol2, NULL)), 
  MAX(COALESCE(Kol3, NULL))
FROM Table1
GROUP BY Kol1;
0
Marcin.Miga napisał(a):

http://sqlfiddle.com/#!4/33f76a/1

Dzięki Marcin, o to mi chodziło :-)

0
radziwil napisał(a):
Marcin.Miga napisał(a):

http://sqlfiddle.com/#!4/33f76a/1

Dzięki Marcin, o to mi chodziło :-)

Pytanie co ma się stać, jak jest więcej niż 2 wiersze o takiej samej wartości Kol1, np jeśli są trzy - co ma się wtedy stać?

Jeśli wynikiem mają i tak być dwa wyniki z Kol1, Bolesław Brus i dwie wartości: - to zrób to JOIN, tak jak napisał @radziwil
screenshot-20230223145656.png

Czy Kol1 ma być unikalne, i w Kol3 może być więcej niż jedna wartość, i chcemy jakoś kontrolować co z nią zrobić funkcjami agregującymi, np policzyć albo połączyć, rzucić na JSON'a - wtedy użyj GROUP BY:
screenshot-20230223150013.png

0

Generalnie, tabela ma więcej kolumn, które będę starał się przedstawić analogicznie jak pokazał Marcin. W wyniku zapytania, w Kol1 mają pojawić się unikalne wartości. W kol3 nie pojawi się więcej niż jeden rekord dla danego numeru z Kol1, podobnie jak w Kol2.

1
radziwil napisał(a):

Generalnie, tabela ma więcej kolumn, które będę starał się przedstawić analogicznie jak pokazał Marcin. W wyniku zapytania, w Kol1 mają pojawić się unikalne wartości. W kol3 nie pojawi się więcej niż jeden rekord dla danego numeru z Kol1, podobnie jak w Kol2.

No to jeśli mają być unikalne, to moim zdaniem lepiej zrobić GROUP BY.

No ale jak wolisz.

1

OK, teraz zauważyłem moją literówkę w Twojej propozycji. Teraz pięknie działa. Muszę doczytać o COALESCE().
Dzięki @Riddle

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