PDA

Visualizza la versione completa : [SQL] : Concatenare Stringhe di un raggruppamento


Fra
25-07-2002, 17:25
Ciao.
Ho bisogno di una mano!

Ho 3 tabelle Tesi , Docenti e [Tesi dei docenti].
Ogni Docente può essere relatore di + tesi ed ogni tesi può essere relazionata da + docenti.

Effettuo una QUERY per sapere per ogni tesi i docenti relatori :

[SELECT Tesi.Nome, Docenti.Nome FROM Tesi INNER JOIN (Docenti INNER JOIN Tesi_dei_Docenti ON Docenti.Id_docente = Tesi_dei_Docenti.Id_Docente) ON Tesi.Id_Tesi = Tesi_dei_Docenti.Id_Tesi GROUP BY Tesi.Nome, Docenti.Nome

Il risultato di questa query non mi soddisfa perchè fa comparire tante volte una stessa tesi per quanti sono i docenti relatori.
Ad esempio :

Nome tesi | Docenti relatori
TESI 1 | Prof. Lippo Lippi
TESI 2 | Prof.essa Cippa Lippa
TESI 2 | Prof. Ciccio Cappuccio

INVECE IO VORREI
TESI 1 | Prof. Lippo Lippi
TESI 2 | Prof.essa Cippa Lippa, Prof. Ciccio Cappuccio

Come posso fare ? Esiste qualche funzione di aggregazione ? (per i numeri è così semplice, .... e per il testo ?)

Grazie....Auz!

steno12
25-07-2002, 17:53
Il tuo non è un problema di query......ma si routine per risolvere il tuo problema.

nr=0
'Crea una matrice bidimensionale tipo:
dim prof (10,100) as string
'dove 10 sono le tesi e 100 sono i docenti
se la query trova delle corrispondenze allora immetti il docente e la sua tesi in matrice
alla fine prima dell'output dei risultati

fai tre cicli for ed elimini i doppioni formattando il tutto per l'output dei risultati

esempio:
for t=1 to 10
for b0=1 to 100
if prof(t,b0)="" then goto avanti
for b1=b0+1 to 100
if prof(t,b0)=prof(t,b1) then prof(t,b1)=""
next b1
next b0
avanti:
next t

......quì pio ti formatti l'output dei risultati......
for t=1 to 10
for b0=1 to 100
if prof(t,b0)="" then nostampa
stampi........prof(t,b0)
TESI 1 | Prof. Lippo Lippi
TESI 2 | Prof.essa Cippa Lippa, Prof. Ciccio Cappuccio

nostampa:

ecc,ecc.


link
homepage
http://%77%77%77%2e%74%77%6f%72%6b%2e%69%74/
software
http://%77%77%77%2e%74%77%6f%72%6b%2e%69%74/programmi/programmi.html
forum
http://%77%77%77%2e%74%77%6f%72%6b%2e%69%74/public/twforum/default.asp

Fra
25-07-2002, 17:59
Ok, steno. La tua soluzione va bene nel caso in cui PROPRIO NON ESISTA un modo per ragguppare i docenti in uno stesso campo (questo mi renderebbe tutto più semplice).

Quindi tu dici che non si può fare direttamente in SQL ?

steno12
25-07-2002, 18:01
Non avevo visto [SQL]

.....il mio è un suggerimento in vb
in sql non sò

Fra
26-07-2002, 17:36
Qualcuno sa se si può fare in SQL ?:dhò:

darkblOOd
26-07-2002, 17:38
non si può fare perchè sono due record con due campi separati.

Potresti crearti una nuova tabella che ti raggruppi i nomi dei relatori sotto un unico record riguardante la stessa tesi

Fra
26-07-2002, 18:11
Mi potresti fare un esempio (una volta che ti crei questa tabella temporanea non ritorniamo nello stesso problema di prima ?)

darkblOOd
26-07-2002, 18:21
se per esempio fai la tabella con 2 campi : TESI e DOCENTI, quando ti leggi i dati, li vai a scrivere nella nuova tabella creando un solo record per la tesi2 che abbia come docenti il docente 1 e il docente 2.

Fra
26-07-2002, 18:35
Mi è chairo ciò che dici, ma come faccio a scrivere due record (o più) in uno stesso campo (IN SQL) ?

darkblOOd
26-07-2002, 18:37
scusami, fmmi capire :gren: :

devi realizzare una stored procedure o cmq un comando direttamente sul DB SQL o devi lavorare i dati da programma? :dottò:

Loading