Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Criterio query con campo espressione

L'altra volta ho chiesto consiglio su come ordinare con un campo 
espressione, adesso ho il problema di impostare dei criteri con un campo 
espressione.
Devo estrapolare i dati che sono "sotto scorta minima"
La query č questa:
SELECT Articoli.IDArticolo, Articoli.Descrizione, 
Sum(Magazzino.Carico-Magazzino.Scarico) AS Giacenza
FROM Articoli INNER JOIN Magazzino ON Articoli.IDArticolo = 
Magazzino.IDArticolo
WHERE (Giacenza<Articoli.ScortaMinima) GROUP BY ecc.
L'errore dice che non č possibile mettere nel criterio un campo espressione
Non vorrei mettere un campo "Giacenza" anche nella tabella Articoli, sarei 
costretto ad aggiornarlo ogni volta che faccio un movimento di magazzino.
Cosa mi consigliate.
Carmelo 

 L'errore dice che non è possibile mettere nel criterio un campo
espressione
Prova con HAVING Giacenza<Articoli.ScortaMinima

 L'errore dice che non è possibile mettere nel criterio un campo espressione
L'hai chiesto una settimana fa e ti ho scritto di usare Having.
Cosa non ti è chiaro?
Alberto
-- 
La bellezza è opinabile, sulla bruttezza sono tutti d'accordo.

 ha scritto nel messaggio 
news:mn.0aeb7d94d...@hotmail.com...

Lo so che l'hai scritto e l'avevo pure provato ma mi da lo stesso errore
Allora se uso Having mi da sempre errore, se uso where  mi da errore solo in 
alcuni casi, tipo questo
Carmelo 

Carmelo ha pensato forte :

Having si mette dopo il group by. E' in sostanza un where applicato ai 
risultati anzichè ai singoli termini dell'operazione di raggruppamento 
(su questi opera appunto il where).
Nel tuo caso, ti occorre giacenza minima ridondante nel risultato, 
quindi devi estrarla con AVG, poi nel having confronti la SUM dei 
movimenti con l'AVG della giacenza minima.
Lo strano è che in una settimana tu non sia riuscito ad aggiustare il 
tasto F1...
Alberto
-- 
Alessandro Bergonzoni: Il tempo vola e noi no. Strano sarebbe se noi 
volassimo e il tempo no, il cielo sarebbe pieno di uomini con 
l'orologio fermo.

 ha scritto nel messaggio 
news:mn.0b477d946...@hotmail.com...

Il problema non è il tasto F1 che ho usato molte volte in Access, ma nel 
fatto che usavo HAVING con l'alias e non con l'espressione(sum ecc) e mi 
dava errore.
Usando invece HAVING 
(Sum(Magazzino.Carico-Magazzino.Scarico)<Articoli.ScortaMinima) mi 
restituisce i record giusti.
Cosa intendi per giacenza minima ridondante, l'AVG non restituisce la media 
dei valori
Carmelo 

Carmelo ci ha detto :

Certo che AVG restituisce la media dei valori.
E quindi, se tutti i valori sono identici, ottieni semplicemente la 
ridondanza del valore stesso "all'esterno del group by".
Ma se Access ti accetta quella forma che citi qui sopra, meglio per te, 
non avrai bisogno di portare 'fuori' il valore.
Alberto
-- 
Karl Marx: Le circostanze fanno l'uomo non meno di quanto l'uomo faccia 
le circostanze.

 ridondanza del valore stesso "all'esterno del group by".
Io di solito uso MIN piuttosto che AVG in questi casi. Sarà che mi ricorda
l'antivirus ^_^, o l'idea che la min sia più leggera.
Per gusto personale però :)
Comunque la sintassi "più standard" dovrebbe essere appunto questa:
[...]
GROUP BY ecc.
HAVING SUM(Magazzino.Carico-Magazzino.Scarico) < MIN(Articoli.ScortaMinima)
(o AVG :D)
Occhio anche se Carico=Null e Scarico=5 ti viene fuori Null e non -5
Eventualmente Coalesce(Carico,0)-Coalesce(Scarico,0) o Iif o quel che è nel
tuo DB.