[SQL] Problem z wyświetleniem wszystkich rekordów spełniających kryteria

0

Witam,

Chcę skonstruować zapytanie, które połączy ciąg znaków: kolumnę nazwisko i pierwszą literę z imienia. Jeżeli nazwisko pojawia się więcej niż jeden raz w tabeli, to dodatkowo dopisany zostanie id tego rekordu dla zapewnienia unikatowości.

To zapytanie działa dobrze dla rekordów bez duplikatów:
it7v7sml6uw6_t.jpg

Tu próbuję zrobić dla duplikatów nazwiska (czyli z dodawaniem id). Niestety, zwracany jest tylko pierwszy rekord spełniający warunki:
syv1rsn1qg7i_t.jpg

Dane z tabeli:
iuglnsvd85bg_t.jpg

Co mogę poprawić, żeby działało to we właściwy sposób? Dlaczego tak się dzieje?

1

Napisz SELECT ALL ... i/lub GROUP BY .... To pierwsze jest chyba do czegoś innego, ale przy tym drugim powinno pójść zapytanie tak jak sobie życzysz. Ten drugi warunek napisz np. z ID, żeby po ID grupował, czyli po unikatowych wartościach.

1

Można to zrobić funkcjami analitycznymi w stylu ROW_NUMBER() OVER (PARTITION BY nazwisko)
Nie napisałeś co to za baza i wersja

1

w en sposób:

select
      zmiana_znakow(lcase(concat(nazwisko,left(imie,1),id)))
from
   klasa
where
    zmiana_znakow(lcase(concat(nazwisko,left(imie,1)))) in (select 
                                       zmiana_znakow(lcase(concat(nazwisko,left(imie,1))))
                                  from
                                       klasa
                                  group by
                                       zmiana_znakow(lcase(concat(nazwisko,left(imie,1))))
                                   having
                                      count(*)>1)
0

Dziękuję wszystkim za odpowiedź i zainteresowanie tematem.
Rozwiązanie proponowane przez Panczo działa dokładnie tak jak chciałem :D
Jeszcze raz dzięki.

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