Newsgroup: it.comp.software.database
Titolo: query complessa. unificare + righe con 2 campi in una riga con + campi

cerco di fare un esempio semplificato del mio ragionamento:
tabella1:
id (int)
nome (varchar)
tabella2:
idtabella1(int) (in relazione con la tabella1)
nomecampo(varchar)
tipo(int)
valore (varchar)
esempio valori:
nella tabella1:
1,pippo
2,pluto
3,rape
nella tabella2:
1,nome1,int,3
1,nome2,int,25
1,nome3,int,3456
1,nome4,money,2200,3647
2,nome5,int,11
2,nome6,money,15,1234
--
Ora spiego perchè di questo caos:
La tabella 2 non può usare delle colonne fisse perchè non posso sapere a
priori ne il numero dei campi ne il valore che ci andrà a finire.
wow :-|
e quindi sono costretto ad usare il formato varchar per essere sicuro di
poterci far stare qualsiasi valore.
a meno di usare un numero predefinito di una ventina di colonne delle quali
la maggiorparte rimarrà quasi sempre impostata a null ritengo che questa sia
la soluzione più corretta. Critiche? Altre soluzioni?
Il problema è che con i campi messi in questo modo non so come generare una
query che mi mostri in maniera semplice ed efficace una riga.
prendendo spunto dall'esempio precedente la riga risultante dalla query
dovrebbe risultare così composta:
se scelgo di visualizzare WHERE idtabella1 = 1:
voglio ottenere che i campi si chiamino:
nome1 | nome2 | nome3 | nome4
che i valori all'interno dei campi vengano convertiti in
int,int,int,money
che i valori della riga siano:
3 | 25 | 3456 | 2200,3647
ovviamente quella non sarà l'unica riga da ottenere. ce ne saranno circa 500
di righe formate in questo modo nella query della tabella2 per ogni id della
tabella1
il che vuol dire che se nella query le righe sono 500, nella tabella reale
le righe sono 1500
spero di essermi spiegato :-(
se prendiamo in considerazione l'id =2 la query deve restituire campi
nominati:
nome5 | nome6
con valori convertiti in
int,money
valori della riga:
11 | 15,1234

non ho specificato il database:
SqlServer2000 sp3

 ha scritto nel messaggio
news:cd6pn3$9h6$1...@newsreader.mailgate.org...
.> cerco di fare un esempio semplificato del mio ragionamento:
.>
.> tabella1:
.> id (int)
.> nome (varchar)
.>
.> tabella2:
.> idtabella1(int) (in relazione con la tabella1)
.> nomecampo(varchar)
.> tipo(int)
.> valore (varchar)
.>
.>
.> esempio valori:
.> nella tabella1:
.> 1,pippo
.> 2,pluto
.> 3,rape
.>
.> nella tabella2:
.> 1,nome1,int,3
.> 1,nome2,int,25
.> 1,nome3,int,3456
.> 1,nome4,money,2200,3647
.> 2,nome5,int,11
.> 2,nome6,money,15,1234
.> --
.> Ora spiego perchè di questo caos:
.> La tabella 2 non può usare delle colonne fisse perchè non posso sapere a
.> priori ne il numero dei campi ne il valore che ci andrà a finire.
.> wow :-|
.> e quindi sono costretto ad usare il formato varchar per essere sicuro di
.> poterci far stare qualsiasi valore.
.>
.> a meno di usare un numero predefinito di una ventina di colonne delle
.>quali
.> la maggiorparte rimarrà quasi sempre impostata a null ritengo che questa
.>sia
.> la soluzione più corretta. Critiche? Altre soluzioni?
.>
.> Il problema è che con i campi messi in questo modo non so come generare
.>una
.> query che mi mostri in maniera semplice ed efficace una riga.
.> prendendo spunto dall'esempio precedente la riga risultante dalla query
.> dovrebbe risultare così composta:
.>
.> se scelgo di visualizzare WHERE idtabella1 = 1:
.>
.> voglio ottenere che i campi si chiamino:
.>
.> nome1 | nome2 | nome3 | nome4
.>
.> che i valori all'interno dei campi vengano convertiti in
.> int,int,int,money
.>
.> che i valori della riga siano:
.> 3 | 25 | 3456 | 2200,3647
.>
.> ovviamente quella non sarà l'unica riga da ottenere. ce ne saranno circa
.>500
.> di righe formate in questo modo nella query della tabella2 per ogni id
.>della
.> tabella1
.> il che vuol dire che se nella query le righe sono 500, nella tabella
.>reale
.> le righe sono 1500
.>
.> spero di essermi spiegato :-(
.>
.> se prendiamo in considerazione l'id =2 la query deve restituire campi
.> nominati:
.>
.> nome5 | nome6
.>
.> con valori convertiti in
.> int,money
.>
.> valori della riga:
.> 11 | 15,1234