Złożone zapytanie SQL

Odpowiedz Nowy wątek
2011-10-23 21:48
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 | ...

edytowany 1x, ostatnio: madmike, 2011-10-25 17:32

Pozostało 580 znaków

2011-10-23 22:03
0

tak to tylko w erze


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-10-23 22:13
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?

Pozostało 580 znaków

2011-10-23 23:21
paweld
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 [email protected]_zgloszenia and id_pracownika>@id_pracow)
break
select top 1 @id_pracow=id_pracownika from asoc_zgloszenie_pracownik where [email protected]_zgloszenia and id_pracownika>@id_pracow order by id_pracownika
select @[email protected]+nazwa_pracownika+', ' from pracownik where [email protected]_pracow
end
return(@pracownicy)
end
go

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

Pozdrawiam
Paweł Dmitruk

Pozostało 580 znaków

2011-10-23 23:39
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!!!


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-10-24 10:17
MiL
0

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

Pozostało 580 znaków

2011-10-24 11:01
0

http://dev.mysql.com/doc/refm[...]ns.html#function_group-concat


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-10-25 10:45
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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