Newsgroup: it.comp.appl.access
Titolo: espressione calcolata in stringa SQL

Saluti
 
il problema (semplificato) è il seguente:
- Ho una tabella cliente (T_Clienti) con il solito campo IdCliente e il campo Cognome 
- Costruisco una query di selezione che mi calcola anche una espressione:
se IdCliente > 2000 metti A, altrimenti metti B;
una cosa del genere, in SQL
 
SELECT TabClienti.IdCliente, IIf([IdCliente]>3000,"A","B") AS Prova
FROM TabClienti;
 
- ora vorrei che ci fosse un filtro; vale a dire, mostrami solo quelli A (lasciamo perdere che potrei lavorare solo su IdCliente, è una semplificazione del problema)
ho ottenuto:
 
SELECT TabClienti.IdCliente, IIf([IdCliente]>3000,"A","B") AS Prova
FROM TabClienti
WHERE (((IIf([IdCliente]>3000,"A","B"))="A"));
 
Tutto funziona, ma non c'è modo di dire, nella condizione WHERE, invece di riposrtarmi l'espressione (iif), solo il nome del nuovo campo calcolato, vale a dire Prova?
 
Una  cosa del genere, cioè:
 
SELECT TabClienti.IdCliente, IIf([IdCliente]>3000,"A","B") AS Prova
FROM TabClienti
WHERE Prova="A";
 
Ovviamente solo così...non funzia...
 
Devo lasciare l'espressione?
 
Vi ringrazio e vi saluto
 
Guido
 
 


Ovviamente devi lasciare l'espressione... però ti chiedo se secondo te quello che fai è una buona idea...?
 
Tu scrivi:
IIf([IdCliente]>3000,"A","B") AS Prova 
 
Poi vorresti mettere un CRITERIO che se il risultato è A filtra...!
 
Se invece di COMLICARTI LA VITA scrivi:
 
SELECT TabClienti.IdCliente, IIf([IdCliente]>3000,"A","B") AS Prova
FROM TabClienti
WHERE [IdCliente]>3000; 
 
Saluti
@Alex

 
 
 
Grazie alex
non ho messo forse in risalto una frase del mio primo post:
 
***- ora vorrei che ci fosse un filtro; vale a dire, mostrami solo quelli A (lasciamo perdere che potrei lavorare solo su IdCliente, è una semplificazione del problema)****
 
chiaro quindi che, in questo esempio stupido, il WHERE debba essere fatto su IdClient...banalmente.
 
Ho semplificato troppo il problema.
 
Metti che il campo calcolato riguardi il [Reddito] del cliente, a cui voglio aggiungere il 22% del [Trattamento_Fine_Rapporto], a cui voglio togliere un [Forfati_Di_Riduzione_Famigliare].
Sto complicando abbastanza?
Complico di più: "questa roba" falla solo se il Cliente è di [Genere] femminile.
 
Ci sarà la mia espressione AS Espr1...
ma nella condizione WHERE, come hai detto nella prima riga del tuo post precedente....non potrò scrivere Espr1...bensi l'intera espressione.
 
O cambia qualcosa, ora che ho complicato il problema e non posso lavorare solo su IdCliente...?
Temo di no, da quanto mi hai scritto.
 
Se avessi interpretato male...ti prego di correggermi.
 
Grazie!
 


Nulla è mai troppo complicato, ma spesso ci sono diversi modi per analizzare il problema.
 
Esempio...
 
Se nella tua Query generi un campo CALCOLATO ipotesi:
([Reddito]*1,22 - [AltroValore]) AS ReddInc22
 
Nella Maschera avrai il tuo campo calcolato...
 
Puoi valutare, invece di Operare nella Query, di operare nella Maschera, ed a quel punto il Filtro e di conseguenza il CRITERIO diventa specifico...
 
Nel tuo ESEMPIO che facevi... pertanto al fine di concretizzare:
 
SELECT TabClienti.IdCliente, IIf([IdCliente]>3000,"A","B") AS Prova
FROM TabClienti 
 
Poi nella Form:
Me.Filter="Prova='A'"
Me.FilterOn=True
 
@Alex

 @Alex
 
Grazie
Chiarissimo!