PDA

View Full Version : sql... chi mi aiuta?


gbv
04-11-2003, 20:52
ciao a tutti.

sono riuscito ha impostare questa query che mi permette di ricavare le giacenze di magazzino ( facendo la differenza degli articoli caricati/scaricati tramite numero seriale del prodotto).
Ora avrei la necessita di ricavare la disponibilità (differenza tra giacenze/impegnato)


tab. carico
cod.articolo descrizione n_serial

tab. scarico
cod.articolo descrizione n_serial

query giacenze:

SELECT carico.cod_articolo, carico.descrizione, count(*) AS Quantità
FROM carico LEFT JOIN scarico ON carico.n_serial = scarico.n_serial
WHERE (((scarico.n_serial) Is Null))
GROUP BY carico.cod_articolo, carico.descrizione
ORDER BY carico.descrizione;

query Giacenze
cod_articolo descrizione Quantità

tab. impegnato
cod.articolo descrizione cliente quantità data

mi basta aggiungere un campo alla query
cod_articolo descrizione Quantità Disponibilità

be sembra facile a spiegare.. il concetto mi e' chiaro ma non riesco ad impostare la query

ringrazio anticipatamente

zakzakit
05-11-2003, 10:04
Originariamente inviato da gbv

query giacenze:

SELECT carico.cod_articolo, carico.descrizione, count(*) AS Quantità
FROM carico LEFT JOIN scarico ON carico.n_serial = scarico.n_serial
WHERE (((scarico.n_serial) Is Null))
GROUP BY carico.cod_articolo, carico.descrizione
ORDER BY carico.descrizione;



Per poterti rispondere, devo capire alcune cose.

1. Ti funziona questa query?
Dovrebbe unire tutti i record di carico e di scarico con n_serial=null, quindi generalmente non dare alcun risultato.

2. Se n_serial serve ad identificare l'articolo, cod_articolo a che cosa serve?

gbv
05-11-2003, 10:08
ciao grazie per l'interesse...

La query (giacenze) funziona, praticamente elimina (carico - scarico) tutti quei record che hanno n_seriale uguale ,
raggruppa (quantità) i rimaneti per codice articolo

cionci
05-11-2003, 10:33
Quale DBMS stai usando ? Ad occhio serve una subquery...

zakzakit
05-11-2003, 10:39
Se la query giacenze funziona, la query disponibilità potrebbe essere:

SELECT giacenze.cod_articolo, [giacenze].[quantità]-nz([impegnato].[quantità]) AS Disponibiltà
FROM giacenze LEFT JOIN impegnato ON giacenze.cod_articolo = impegnato.cod_articolo

(La funzione nz() trasforma null in zero).

(Mi sembra che la query giacenze non funzioni se ho solamente dei carichi. Però forse non ho ancora capito bene l'utilizzo di n_serial)

zakzakit
05-11-2003, 10:42
Meglio così:

SELECT giacenze.cod_articolo, [giacenze].[quantità]-nz([impegnato].[quantità],0) AS Disponibiltà
FROM giacenze LEFT JOIN impegnato ON giacenze.cod_articolo = impegnato.cod_articolo

zakzakit
05-11-2003, 10:52
Io le giacenze le farei così:

query qcarico
SELECT carico.cod_articolo, Count(carico.cod_articolo) AS qtacarico
FROM carico
GROUP BY carico.cod_articolo

query qscarico
SELECT scarico.cod_articolo, Count(scarico.cod_articolo) AS qtascar
FROM scarico
GROUP BY scarico.cod_articolo

query giacenze
SELECT qcarico.cod_articolo, [qcarico].[qtacarico]-nz([qscarico].[qtascar],0) AS disponibilità
FROM qcarico LEFT JOIN qscarico ON qcarico.cod_articolo = qscarico.cod_articolo

zakzakit
05-11-2003, 10:54
Scusa, query giacenze non "as disponibilità" ma "as quantità"

gbv
05-11-2003, 11:18
potrebbe funzionare , ma non nel mio caso.
la gestione del carico/scarico nel mio prog e' un po' particolare

ti faccio un esempio

carico :

cod_articolo descrizione n_serial
12340 mouse 2589636
12340 mouse 2589634
12340 mouse 2589637
23569 tastiera 1258961
scarico:

cod_articolo descrizione n_serial
12340 mouse 2589634

giacenze (non raggruppate):

cod_articolo descrizione n_serial
12340 mouse 2589636
12340 mouse 2589637
23569 tastiera 1258961

giacenze (raggruppate):

cod_articolo descrizione quantità
12340 mouse 2
23569 tastiera 1


spero di essere stao piu' chiaro.

ora poniamo il caso che un cliente mi impegni un articolo

impegnato:

cod_articolo descrizione quantita
12340 mouse 1


la mia query dovrebbe...

cod_articolo descrizione quantità
12340 mouse 2(giacenza reale)- ( 1 impegnato)= 1(disponibile)

spero che mi possa aiutare

grazie
23569 tastiera 1

zakzakit
05-11-2003, 13:19
Ho inserito i tuoi dati nel mio db, ed utilizando indifferentemente la tua o la mia query giacenze ottengo:

giacenze:
mouse 2
tastiera 1

disponibilità:
mouse 1
tastiera 1

Che cosa non va?

gbv
05-11-2003, 15:23
la query delle disponibilità come l'hai creata?
io devo interfacciare tutto in vb (la query giacenze e' stata già fatta) volevo appogiarmi a quella per creare la query disponibilità.

zakzakit
05-11-2003, 16:18
query disponibilità:

SELECT giacenze.cod_articolo, [giacenze].[quantità]-nz([impegnato].[quantità]) AS Disponibiltà
FROM giacenze LEFT JOIN impegnato ON giacenze.cod_articolo = impegnato.cod_articolo

gbv
05-11-2003, 17:11
ho scritto la query che mi hai detto pero....
vb non riesce a trovare la tabella o la query di input ' giacenze'( è normale)
come posso fare?

zakzakit
05-11-2003, 17:40
Io sto provando questi esempi internamente in Access, tu che cosa stai usando?

gbv
05-11-2003, 18:02
io li uso in vb 6

zakzakit
05-11-2003, 19:46
Spiacente, non posso aiutarti. Il mio VB6 si rifiuta di interfacciarsi con il db access dicendo che non ne riconosce il formato. Probabilmente è troppo vecchio per access 2000.

gbv
05-11-2003, 21:13
dovresti convertirlo in access97
access2000 non va con vb6
ti ringrazio cmq
ciao

cionci
06-11-2003, 01:36
Access2000 va con VB6...bastta mettere il service pack 5 ;)

zakzakit
06-11-2003, 13:51
Originariamente inviato da cionci
Access2000 va con VB6...bastta mettere il service pack 5 ;)

Grazie dell'informazione.

gbv
06-11-2003, 19:32
questa non la sapevo ,grazie.

zakzakit la tua query non funziona in maniera corretta

cionci mi potresti aiutare?

cionci
07-11-2003, 11:46
Se la tua query funziona:

cod.articolo descrizione cliente quantità data

SELECT carico.cod_articolo, carico.descrizione, count(*) AS Quantità, count(*)-B.Impegnati As Disponibilità
FROM carico LEFT JOIN scarico ON carico.n_serial = scarico.n_serial,
[SELECT cod_articolo, count(*) As Impegnati
FROM Impegnati GROUP BY cod_articolo] As B LEFT JOIN carico ON carico.cod_articolo = carico.cod_articolo
WHERE (((scarico.n_serial) Is Null))
GROUP BY carico.cod_articolo, carico.descrizione, B.Impegnati
ORDER BY carico.descrizione;

Prova così...la sintassi delle subquery nel FROM non me la ricordo di preciso... Comunque inserendo la query in un Query all'interno di Access te la dovrebbe correggere....

gbv
07-11-2003, 15:43
proverò questa sera e ti farò sapere.

grazie