Newsgroup: it.comp.lang.visual-basic
Titolo: Concatenare i dati di piu' record in uno solo con una query ?

Ciao a tutti.
Ho questi dati all'interno di una tabella :
Prodotto    Lingua    Riga      Descrizione
Prodotto1    I            1        Descr1
Prodotto1    I            2        Descr2
Prodotto1    I            3        Descr3
Prodotto2    I            1        Descr1
Prodotto2    I            2        Descr2
Prodotto2    I            3        Descr3
Prodotto3    I            1        Descr1
Prodotto3    I            2        Descr2
Prodotto3    I            3        Descr3
Ecc...
E' da notare il fatto che i prodotti sono circa 12000; eseguendo questo
calcolo con dei cicli di EOF i tempi di lavoro diventano proibitivi (ho gia'
provato).
Con una query dovrei riuscire ad ottenere questo risultato :
ProdottoElab    LinguaElab    RigaElab      DescrizioneElab
Prodotto1        I                123        Descr1 Descr2 Descr3
Prodotto2        I                123        Descr1 Descr2 Descr3
Prodotto3        I                123        Descr1 Descr2 Descr3
Non riesco a trovare il modo di concatenare nel campo RigaElab i valori
contenuti nei 3 record del campo Riga e la stessa cosa per quanto riguarda
il campo DescrizioneElab.
Qualcuno di voi ha qualche idea su come io possa fare a risolvere ?
Grazie in anticipo.
-- 
'''®foolbrain®'''
Visual Basic Programmer
Database Designer & Manager
F.O.O.L.: Functional Obedient
          Observation Lifeform
B.R.A.I.N.: Biomechanical Robotic Android
            Intended for Nullification
ICQ# 88912631

 Grazie in anticipo.
Se i campi sono di tipo char (altrimenti ti serve un cast as char), puoi
provare:
select a.prodotto, a.lingua,
RigaElab=( Coalesce(a.riga,' ')+Coalesce(b.riga,' ')+Coalesce(c.riga,' ')),
descrizioneelab==( Coalesce(a.desc,' ')+Coalesce(b.desc,'
')+Coalesce(c.desc,' '))
from tabella as a
full outer join tabella as b
on a.prodotto=b.prodotto and a.lingua=b.lingua
full outer join tabella as c
on a.prodotto=c.prodotto and a.lingua=c.lingua
group by a.prodotto,a.lingua
Da verificare cosa succede se per un prodotto/lingua esiste la riga 2 e 3 ma
non la 1.
Ciao
Alberto
-- 
"Tina, ta te tňta tinta un tac!"
"Te cat tac i tac, m'tac't un tac?"
"Me ca tac un tac a tč?
Tac'tel te l tň tac, tň!"

 Alberto
Spero tu abbia altre idee, nel frattempo ti ringrazio.


 Spero tu abbia altre idee, nel frattempo ti ringrazio.
Purtroppo no.
La struttura che hai utilizzato è quella stilisticamente (e praticamente)
più corretta.
Presenta tuttavia la sfortuna di rendere complesso questo tipo di
trasposizione di righe in colonne.
Quello che ti servirebbe (ma non eisste), è una sorta di CONCAT che operi
come funzione di aggregazione, tipo il SUM, per cui faresti un group by ID e
avresti la concatenazione di tutto.
Ma non esiste.
Salvo creare una SP che:
1) Crea la tabella di destinazione
2) La popola con un distinct degli ID
3) inizia un ciclo di Update per cui ad ogni giro appende al campo
Descrizione la descrizione where Riga=N (che è l'indice del loop) AND
Tab_Origine.Prodotto=Tab_Destinazione.Prodotto
Ciao
Alberto
-- 
"Tina, ta te tòta tinta un tac!"
"Te cat tac i tac, m'tac't un tac?"
"Me ca tac un tac a tè?
Tac'tel te l tò tac, tò!"

 Tab_Origine.Prodotto=Tab_Destinazione.Prodotto
Anche questa idea e' buona ma su microsoft.public.it.sql mi hanno fornito un
brillante ed utilissimo aiuto che mi ha permesso di risolvere il problema.
Se vi interessa sapere come, andate a leggervi il thread.
Ciao a tutti.


 il thread.
Soluzione molto affascinante.
Non avevo mai valutato l'idea di mettere una variabile nella select e farla
popolare durante l'execution.
Il mio approccio nasceva dall'adeguamento di soluzioni per trasporre righe
in colonne, mentre nel tuo caso, visto che alla fine di colonne risultato ne
hai solo una 'composta', si poteva inventare qualcosa di meglio.
Ciao
Alberto
-- 
"Tina, ta te tňta tinta un tac!"
"Te cat tac i tac, m'tac't un tac?"


 hai solo una 'composta', si poteva inventare qualcosa di meglio.
Le colonne composte alla fine sono 2 perche' in pratica mi sono creato 2
distinte user function, una per le righe e l'altra per le descrizioni.
Ad ogni modo concordo pienamente con te (ormai si e' capito), a trovare
qualcosa di migliore o che prendesse il problema da un altro angolo,
potevamo pensarci di piu'. :)
