SQL query

martedì 17 novembre 2009 - 11.53

michelepari Profilo | Newbie

ciao a tutti.
premetto che sono anni che non ho più a che fare con access e mi servirebbe aiuto.
Devo creare un db per la gestione del magazzino.
E' così creato:
tabella "magazzino" (con i campi: Id, codice, categoria, descrizione, prezzo_D, prezzo_T, cassetto, venduto (campo si/no)
tabella "giacenze" (uguale a tabella magazzino)
tabella "venduto" (uguale a tabella magazzino)

la tabella magazzino avrà tutti i record compilati con tutti i dettagli degli articoli.
all'inizio la tabella giacenze dovrà essere uguale a quella magazzino presupponendo di non aver fatto ancora nessuna vendita.

la query che devo creare mi deve gestire vendite e giacenze, praticamente:
quando vendo un articolo e spunto il campo venduto dalla tabella "magazzino", tale record deve "sparire" dalla tabella "giacenze" e apparire in quella "venduto" mentre in quella "magazzino" rimane e ha il campo "venduto" con la spunta.

la parte di query per copiare il record da una tabella all'altra sono riuscito a crearla (INSERT FROM ecc.ecc..), mi manca tutto il resto, praticamente cancellare il record e farlo comparire nell'altra tabella.

passo successivo: se per qualche motivo tolgo la spunta dal campo "venduto" nella tabella "magazzino" deve accadere il contrario e ricomparire.

spero di non aver scritto troppo complicato.
grazie a tutti

motogpdesmo16 Profilo | Senior Member

Ciao,
secondo me drest innanzitutto rivedere la struttura delle tue tre tabelle. Così come le hai progettate incorri sicuramente in errori di ridondanza e, stando alla teoria, correggetemi se sbaglio, non sono nemmeno in forma normale.

Ritengo quindi debba progettar la struttura dati in questa maniera:

tabella "magazzino" (con i campi: Id, codice, categoria, descrizione, prezzo_D, prezzo_T, cassetto) (eliminare la colonna venduto)
tabella "giacenze" (Id (chiave esterna sulla tabella magazzino), Quantita)
tabella "venduto" (Id (chiave esterna sulla tabella magazzino), Quantita)

All'inizio avrai valorizzata solo la tabella Magazzino, che conterrà tutti gli articoli e contestualmente imposterai la giacenza nella tabella Giacenze.
Quando venderai un articolo, effettuerai l'INSERT/UPDATE (a seconda che il record sia presente o meno in tabella) nella tabella Venduto e decrementerai la quantità presente in Giacenze sempre riferita allo stesso articolo (rintracciabile quindi tramite chiave esterna).

Il concetto di campo "venduto" secondo me è sbagliato: puoi avere una giacenza di 10 pezzi a magazzino e venderne solo 5 (quindi quantità inferiore a quella presente in giacenza). Stando a come hai immaginato tu la situazione, ogni vendita dovrebbe essere di una quantità pari a quella presente in magazzino.

Se hai bisogno di ulteriori chiarimenti, chiedi pure!
ciao ciao
Man mano che andar

michelepari Profilo | Newbie

ciao,
intanto grazie per la risposta...come mi proponi di creare la tabella giacenze non va bene per le mie esigenze.

I dati che io devo inserire sono degli articoli che possono avere lo stesso codice ma descrizione differente.
nella tabella giacenze non mi si deve visualizzare un totale raggruppato per articoli (in quanto possono appunto differenziare per descrizione) ma tanti record quanti sono effettivamente gli articoli non venduti.

ho creato un file in excel che ho adoperato finora, solo che volevo creare qualcosa di più carino aggiungendo delle maschere per l'inserimento.
Ho creato tre fogli di lavoro: foglio Magazzino (che elenca voce per voce tutti gli articoli (anche se con stesso codice)) foglio Venduto e foglio Giacenze
Nel file di excel gli stessi campi delle tabelle di access che ho sopra descritto. Il campo "venduto" nel foglio Magazzino,se lo lascio vuoto, l'articolo mi rimane nel foglio Giacenze, se scrivo "1" mi sparisce da foglio Giacenze e compare in quello Venduto (tra l'altro aggiornando un campo che conteggia il totale degli articoli venduti e contestualmente nel foglio Giacenze lo stesso campo diminuisce di un unità)

prassitele Profilo | Newbie

Ciao.
Secondo me, il suggerimento che ti ha dato "motogpdesmo16" non è sbagliato. Infatti tu dici di avere articoli con il medesimo codice ma descrizione diversa. Questo non costituisce un problema. Se usi ID come primo campo della tua tabella Magazzino, ritengo che questo sia la chiave della tua tabella. Nessuno, pertanto, t'impedisce di porre questo ID autoincrementale (Autonumber in SQL Server); questo significa che possono sicuramente essere presenti in Magazzino record con il medesimo Codice ma questi saranno contraddistinti da ID diverso. E' questo ID che dovrai usare per realizzare la chiave esterna con le Tabelle Giacenze e Venduto e, in qualunque momento potrai conoscere tutte le caratteristiche di ciò che hai venduto o che avrai in giacenza con query Select semplici come quella che ti scrivo qui di seguito:

-- Per il Venduto --
Select A.Codice, A.Categoria, A.Descrizione, B.Quantita
From Magazzino A, Venduto B
Where B.ID = A.ID

-- Per la Giacenza --
Select A.Codice, A.Categoria, A.Descrizione, B.Quantita
From Magazzino A, Giacenza B
Where B.ID = A.ID

Riguardo, poi, alla movimentazione delle "merci", anche nel caso in cui la quantità di ogni articolo sia 1, i problemi non si porrebbero; ti basterebbe, infatti, all'atto della vendita, decrementare la quantità nella tabella Giacenze (fino, chiaramente, a 0) ed Inserire l'Id dell'articolo venduto nella tabella Venduto ponendo automaticamente la quantità ad 1 (se l'articolo non è presente in questa tabella) oppure semplicemente incrementarne la quantità (se l'Id dell'articolo è già presente in Venduto).

In questa ipotesi, si modificherebbe un pochino la query che ti ho indicato sopra, qualora tu abbia intenzione di mostrare gli articoli ancora giacenti in quantità > 0

-- Per la Giacenza --
Select A.Codice, A.Categoria, A.Descrizione, B.Quantita
From Magazzino A, Giacenza B
Where B.Quantita > 0
And B.ID = A.ID

Spero di aver interpretato bene il tuo quesito.
In ogni caso, Ciao.

motogpdesmo16 Profilo | Senior Member

@michelepari: secondo me dovresti staccarti da quello che hai fatto e cercare di realizzare, per quanto possibile, qualcosa ex-novo. Credo sia formalmente errato il tuo metodo di lavoro per la determinazione di venduto e giacenze. L'analisi dell'amico prassitele è altresì corretta e, unendo ciò che ti abbiamo scritto, credo potrai realizzare qualcosa di sicuramente più efficace.

michelepari Profilo | Newbie

ragazzi grazie a tutti....ottimi suggerimenti....come anticipato è da una vita che non mi cimento in Access ed è evidente che la coltre di "polvere" depositata sulle mie memorie è più spessa di quanto sperassi.
i vostri suggerimenti sono stati come una passata di Swiffer...grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5