Newsgroup: it.comp.appl.access
Titolo: Leggere valore di colonna passata da variabile

Ciao a tutti,
ho una domanda un po' particolare da fare, che non riesco a visualizzare e 
che quindi mi vien difficile anche da esprimere.
Provo con un esempio.
Diciamo di avere due tabelle:
TAB1: Citt�, Lettera ([Torino, A], [Milano, B], [Napoli, C], [Genova, B])
TAB2: Citt�, A, B, C ([Torino, 0, 1, 2], [Napoli, 2, 4, 5], [Milano, 1, 4, 
5])
Quindi due tabelle dove nella prima ci sono due colonne, Citt� e Lettera, 
mentre nella seconda ci sono 4 colonne, la Citt� di TAB1 e le colonne 
corrispondenti alle lettere che si possono trovare in TAB1.
Io quello che voglio fare � una select su TAB1 e TAB2 che mi estragga Citt�, 
Lettera e il numero corrispondente su TAB2 a questa Lettera.
Cio�, se per esempio considero Torino, devo avere "Torino, A, 0", oppure se 
considero Milano avere "Milano, B, 4".
Spero di essermi spiegato. Ogni aiuto in tal senso � graditissimo, anche 
solo sapere "cosa" dovrei cercare.
Grazie,
A. 

 A.
Ciao
Prova questa query
SELECT TAB1.Citta, TAB1.Lettera, Switch([lettera]="A",[a],[lettera]
="B",[B],[lettera]="C",[c]) AS Espr1
FROM TAB1 INNER JOIN TAB2 ON TAB1.Citta = TAB2.Citta;
La TAB1 ha il campo Citta e il campo Lettera (Testo di un carattere)
La TAB2 ha il campo Citta e i campi A,B,C (Testo di un carattere)
se i campi A,B,C sono numerici dovrai fare qualche adattamento.
Ciao, è stato un bel problemino
Alberto

 ha scritto:
Prova questa query
Ciao Alberto,
prima di tutto grazie mille per l'interessamento. La soluzione, cos� a 
vista, mi sembra una buona possibilit�.
Ora entriamo un po' pi� nei dettagli, allora :)
In realt� "A", "B" e "C" sono circa 6 valori possibili, su campo testuale e 
gi� composto da un'espressione.
Nello specifico io nella query trovo il valore secondo l'espressione 
<("LisCosto" & tab1.UnitaMisura & "_" & tab2.LatC) AS TipoDiLatta>.
Quindi TipoDiLatta � il precedente "A". "B", "C", ed � tipo LisCostoKG_A, 
LisCostoKG_B, LisCostoLT_A, ecc.
Secondo te, vale lo stesso principio precedente?
Grazie!
A. 

 A.
Ciao,
a spanne direi di sì, la chiave è nell'istruzione switch.
Tuttavia, secondo me, in un DB bene organizzato non si dovrebbero
presentare
situazioni del genere.
Se vuoi puoi postare una demo del tuo DB per dargli un'occhiata.
Ciao e buona domenica.
Alberto

 ha scritto :
Se vuoi puoi postare una demo del tuo DB per dargli un'occhiata.
Ciao e buona domenica.
Alberto
Ciao,
rispondo solo ora perch� nel frattempo ho cercato di andare avanti ma mi 
sono inesorabilmente arenato.
Allora, il db � cos� composto (ti elenco le colonne principali):
TAB1 (Indice, CodiceGestionale, UnitaMisura)
TAB2 (CodClasse, Classe)
TAB3 (CodGestionale, LisCostoKG_A. LisCostoKG_B, LisCostoKG_C, LisCostoLT_A, 
LisCostoLT_B, LisCostoLT_C, CampoProva)
Io ho un applicativo che mi permette di costruire una serie di TAB1.Indice.
Quello che devo trovare � il costo di ogni singolo oggetto, che ha uno 
specifico costo, il quale pu� essere KG_(A, B, C ) o LT_(A, B, C).
I legami sono i seguenti: CodClasse sono le ultime 2 cifre di 
TAB1.CodiceGestionale; TAB3.CodGestionale sono le prime 6 cifre di 
TAB1.CodiceGestionale.
Facendo una query del tipo
SELECT TAB1.Indice, TAB1.UnitaMisura, TAB2.Classe, 
Left([TAB1.CodiceGestionale],6) AS CodGestionale, ("LisCosto" & 
TAB1.UnitaMisura & "_" & TAB2.Classe) AS TipoDiClasse, TAB3.CampoProva
FROM TAB1, TAB2, TAB3
WHERE (((TAB1.DataOperazione)>#12/31/2007#) And 
((TAB1.DataOperazione)<#7/1/2008#) And TAB1.Esportato<>"ESC" And ("'" & 
Right(TAB1.CodiceGestionale,2) & "'")=TAB2.CodClasse And 
(Left([TAB1.CodiceGestionale],6)=TAB3.CodGestionale))
ORDER BY TAB1.Indice;
mi estrae un po' di risultati, ma non sono sensatissimi.
In particolare dovrei fare tutte LEFT JOIN, nel senso che da TAB1 deve 
prendere tutti i risultati che rispettano le WHERE (Data e valore di 
Esportato), da TAB2 quelle che hanno il codice e da TAB3 quelle (che 
avranno) un costo.
Poi devo poter vedere il costo, cosa che al momento la query non fa ma mi 
presenta solo TAB3.CampoProva.
Suggerimenti?
Grazie,
A. 

Sono andato un po' pi� avanti rispetto alla query precedente, ma c'� qualche 
errore perch� ci mette un secolo ad eseguire la query.
SELECT TAB1.Indice, TAB1.UnitaMisura, TAB2.LatClasse, 
Left([TAB1.CodiceGestionale],6) AS CodGestionale, ("LisCosto" & 
TAB1.UnitaMisura & "_" & TAB2.LatClasse) AS TipoDiLatta
FROM TAB1 LEFT JOIN TAB2 ON  ("'" & Right(TAB1.CodiceGestionale,2) & 
"'")=TAB2.CodClasse
WHERE (((TAB1.DataOperazione)>#12/31/2007#) And 
((TAB1.DataOperazione)<#7/1/2008#) And (TAB1.Esportato<>"ESC") And 
Left(TAB1.CodiceGestionale,6) IN (SELECT Left([TAB1.CodiceGestionale],6) 
FROM TAB1 LEFT JOIN TAB3 ON 
(Left(TAB1.CodiceGestionale,6)=TAB3.CodGestionale)))
ORDER BY TAB1.Indice;
Speriamo...grazie!
A.