PDA

View Full Version : [SQL] semplice interazione tra 2 tabelle access


Zazolo
05-04-2009, 10:52
ho due tabelle, in una ho gli arrivi e in una le uscite

entrambe le tabelle hanno due campi
- codice articolo
- quantità

ogni volta che mi arriva un certo articolo, lo scrivo nella tabella arrivi, e quando ne esce una certa quantità lo segno nella tabella uscite

come faccio a sapere quanta roba m'è rimasta?

mi servirebbe da fare un

SELECT arrivi.quantità - uscite.quantità
from arrivi, uscite
where ?????

come faccio?

a logica farei così

direi prima di sommare tutte le quantità di ogni codice articolo in modo da sapere la quantità totale arrivata di ogni articolo

poi dovrei fare la stessa cosa per le uscite ed infine sottrarre tra di loro le quantità col medesimo articolo

ma... come posso farlo?

dovrebbe esser semplice

Ken1986
05-04-2009, 12:17
con sum(quantita) hai la somma, quindi ti sommi le quantità in entrate meno quelle in uscita :D

Zazolo
05-04-2009, 16:01
già, ma per fargli sommare solo le quantità relative ai vari articoli?

nella tabella ARRIVI le entrate relative ad un articolo sono più di una, stesso dicasi per le USCITE

che condizione devo mettere?

where DISTINCT codice articolo?

Ken1986
05-04-2009, 16:23
Allora devi raggruppare utilizzando Gruoup By

Zazolo
10-04-2009, 17:39
ho risolto tutto, solo una cosa

devo anche sottrarre dei valori tra le due tabelle, solo che quando il rispettivo campo non compare nella seconda, la tabella finale mi da campo null

mi spiego meglio con un esempio pratico

tabella 1

mele 12
pere 13
banane 14

tabella 2

mele 5
pere 6

come risultato mi da

tabella risultante

mele 7
pere 7
banane [campo vuoto]

come faccio?

ps ho usato il left join per avere anche la riga banane nel risultato, ma non riesco a far calcolare il valore della quantità

Zazolo
15-04-2009, 01:06
c'ho provato ma proprio non vuol darmi retta... come posso fare?

gugoXX
15-04-2009, 12:10
Prova cosi'


SELECT IDEntrate, qtaen, qtaus,
CASE WHEN qtaen IS NULL THEN 0 ELSE qtaen END -
CASE WHEN qtaus IS NULL THEN 0 ELSE qtaus END AS Rimasti
FROM (
SELECT IDEntrate,SUM(Entrata) qtaen
FROM Entrate
GROUP BY IDEntrate) EN
LEFT OUTER JOIN
( SELECT IDUscite,SUM(Uscite) qtaus
FROM Uscite
GROUP BY IDUscite) US
ON (EN.IDEntrate=US.IDUscite)


In pratica prima sommi, poi fai la LEFT JOIN e poi se uno delle 2 parti e' NULL, la sostituisci con 0 prima di fare la sottrazione.
Questo se ACCESS supporta la funzione CASE, altrimenti sono praticamente certo che ne supportera' un surrogato.
Altrimenti buttalo, cosa che dati gli ultimi tipi di licenza di altri motori professionali (praticamente gratis) ti consiglio comunque.

Zazolo
19-04-2009, 17:41
ok, grazie mille per gli aiuti, ora tutto è pronto, le tabelle sono pronte e le query create

ora... mi serve da creare una gestione del tutto sempre tramite access, utilizzando le maschere per semplificare il lavoro e l'immissione dei dati

come faccio, ad esempio, a fare una maschera per aggiungere un elemento ad una tabella esistente?

come faccio invece a fare una maschera relativa ad una query? in questo caso, come faccio a far comparire il menu a tendina con i suggerimenti alle eventuali possibili scelte?

ad esempio, quando vado ad inserire una nuova uscita, vorrei che nel campo relativo al codice dell'articolo mi suggerisca gli elementi ancora presenti nel magazzino...