Złożone zapytanie SQL

0

Witam, najpierw przedstawię strukturą bazy danych, a później poproszę o pomoc w utworzenia zapytania lub procedury.
Przede wszystkim prosta tabela Zgloszenie (id_zgloszenia, nazwa_zgloszenia, itp...), tabela Pracownik (id_pracownik, nazwa_pracownik) i na koniec tabela Asoc_Zgloszenie_Pracownik. Na koniec chciałbym mieć listę zgłoszeń wraz z pracownikami obsługującymi dane zgłoszenie, oczywiście tak, żeby zgłoszenie nie były powtarzane, w jednym wierszu było kilka nazw pracowników. Czli:

Kowalski, Nowak | Instalacja | ....
Kowalski, Nowak, Jabłczyński | Serwis | ...

0

tak to tylko w erze

0

Czyli co mam programowo zbierać nazwiska (Kowalski, Nowak) i dodawać je jako string, a jeżeli zmienią się dane pracownika to zmieniać je we wszystkich rekordach?
Strasznie nie fajnie... A napisanie jakieś procedury?

0

wykorzystaj funkcję, np. dla MSSQL

 create function pracownicy_zgl (@id_zgloszenia int)
returns varchar(250)
as
begin
declare @pracownicy varchar(250), @id_prac int
select @pracownicy='', @id_pracow=0
while 1=1
begin
if not exists (select 1 from asoc_zgloszenie_pracownik where id_zgloszenia=@id_zgloszenia and id_pracownika>@id_pracow)
break
select top 1 @id_pracow=id_pracownika from asoc_zgloszenie_pracownik where id_zgloszenia=@id_zgloszenia and id_pracownika>@id_pracow order by id_pracownika
select @pracownicy=@pracownicy+nazwa_pracownika+', ' from pracownik where id_pracownika=@id_pracow
end
return(@pracownicy)
end
go

select
dbo.pracownicy_zgl(id_zgloszenia) pracownicy,
nazwa_zgloszenia 
from
zgloszenia

Pozdrawiam
Paweł Dmitruk

0

ty tak na poważnie z takim potworkiem??? Jak będę miał np. 100 pracowników to wykona się 301 selectów!!!!!!

To już prościej i szybciej będzie zadeklarować kursor i w każdym jego przebiegu dopisywać nazwisko do jakiejś zmiennej a nie 3 selecty na KAŻDY rekord!!!

0

Najlepiej zrobić funkcję z kursorem, która zwraca string z pracownikami. Da się też zrobić bez kursora, wtedy jest trochę szybciej.

0

Przepraszam nie napisałem, że pracuję na MS SQL, a nie na MySQL

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