Problema con una query

martedì 20 gennaio 2009 - 11.08

.nethell Profilo | Newbie

Salve a tutti,
ho un problema con una query SQL in pgAdmin III: ho due tabelle, una che si chiama "Vendite" e l'altra "Prodotti"; la tabella "Vendite" ha i campi "CodiceProdotto", "QuantitaVenduta","QuantitaRimanente" e "DataVendita", mentre la tabella "Prodotti" ha i campi "CodiceProdotto", "Quantita", "CostoUnitario" e "DataCaricamento". Nel mio programma, in un modulo, devo eseguire una query che mi mostri la giacenza, cioè i prodotti rimasti in magazzino per un certo intervallo di date (da... a...), compreso il totale delle giacenze, che è la somma della moltiplicazione del CostoUnitario per la Quantità in magazzino di tutti i prodotti, cioè:

Totale = Somma(CostoUnitario*Quantita)

Sapreste aiutarmi su come impostare la query?

alx_81 Profilo | Guru

>Salve a tutti,
Ciao

>ho un problema con una query SQL in pgAdmin III: ho due tabelle,
>una che si chiama "Vendite" e l'altra "Prodotti"; la tabella
>"Vendite" ha i campi "CodiceProdotto", "QuantitaVenduta","QuantitaRimanente"
>e "DataVendita", mentre la tabella "Prodotti" ha i campi "CodiceProdotto",
>"Quantita", "CostoUnitario" e "DataCaricamento". Nel mio programma,
>in un modulo, devo eseguire una query che mi mostri la giacenza,
>cioè i prodotti rimasti in magazzino per un certo intervallo
>di date (da... a...), compreso il totale delle giacenze, che
>è la somma della moltiplicazione del CostoUnitario per la Quantità
>in magazzino di tutti i prodotti, cioè:
>
>Totale = Somma(CostoUnitario*Quantita)
>
>Sapreste aiutarmi su come impostare la query?
Non conosco PostgreSQL, ma la funzione di aggregazione SUM la ha senz'altro:
http://www.postgresql.org/docs/8.3/interactive/functions-aggregate.html

Per il resto, dovrei capire cosa vuoi ottenere di preciso.
Prova a farci un esempio concreto con le due tabelle.

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

.nethell Profilo | Newbie

Grazie per la rapida risposta.. cmq ti posto un esempio pratico di quello che vorrei ottenere:

Tabelle Prodotti:
------------------------------------------------------------------------------------------------
| CodProdotto | Quantità | CostoUnitario | DataCaricamento |
------------------------------------------------------------------------------------------------
--------1-----------------------4----------------- 8,5------------------------31-12-2007
--------2-----------------------3--------------------6------------------------02-01-2008
--------3-----------------------7-------------------4,7-----------------------07-01-2008

Tabella Vendite:
----------------------------------------------------------------------------------------------------
| CodProdotto | QuantitàVendute | QuantitàRimanenti | DataVendita |
----------------------------------------------------------------------------------------------------
-----1---------------------- 2------------------------- 4----------------------- 31-12-2008
-----2----------------------7--------------------------3------------------------02-01-2009
-----3----------------------4--------------------------7------------------------07-01-2009

Tramite una Query vorrei ottenere la giacenza di questi prodotti, avendo specificato un intervallo di date
Esempio: Tra(31-11-2008 ed il 10-01-2009)

Cordiali Saluti.

alx_81 Profilo | Guru

>Tramite una Query vorrei ottenere la giacenza di questi prodotti,
>avendo specificato un intervallo di date
>Esempio: Tra(31-11-2008 ed il 10-01-2009)
Quello che non capisco è se quel campo QuantitaRimanenti è già la giacenza per il prodotto..
Per questo ti chiedevo l'esempio concreto anche del risultato che vorresti ottenere, proprio il resultset, poi scriviamo la query in sql standard..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

.nethell Profilo | Newbie

QuantitàRimanenti è già la giacenza, ma nella tabella Prodotti è memorizzato il campo DataCaricamento, e nella ricerca per data l'utente inserisce un intervallo di date; però erroneamente la ricerca fa riferimento alla DataCaricamento, così se l'utente non carica dall'anno scorso per esempio, però ha venduto in questo periodo, nei risultati della ricerca non risulta una diminuzione effettiva della giacenza come in realtà dovrebbe essere.

alx_81 Profilo | Guru

>QuantitàRimanenti è già la giacenza, ma nella tabella Prodotti
>è memorizzato il campo DataCaricamento, e nella ricerca per data
>l'utente inserisce un intervallo di date; però erroneamente la
>ricerca fa riferimento alla DataCaricamento, così se l'utente
>non carica dall'anno scorso per esempio, però ha venduto in questo
>periodo, nei risultati della ricerca non risulta una diminuzione
>effettiva della giacenza come in realtà dovrebbe essere.
Non hai possiblità di intervenire direttamente sulla ricerca per farla tra le date corrette?
Ricercando per data di caricamento ottieni i prodotti per data di caricamento, ma per sapere la giacenza attuale, dovresti sottrarre tutte le vendite fatte dalla notte dei tempi ad oggi.. Forse è veramente meglio intervenire sulla logica di interrogazione non trovi?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

.nethell Profilo | Newbie

Sì, in effetti la query di ricerca andrebbe migliorata: nel JOIN tra la tabella Vendite e la tabella Prodotti c'è tutto quello che ci serve, ma forse si deve fare qualche passaggio in più. Se voglio sapere la giacenza ad una certa data faccio la SELECT SUM(QuantitàRimanente*CostoUnitario) fino a quella data, memorizzando il risultato, e una SELECT SUM(QuantitaRimanente*CostoUnitario) da quella data in poi, memorizzando sempre il risultato. Sommando i risultati ottenuti dalle due SELECT è possibile risalire alla giacenza presente nel magazzino in una certa data.

alx_81 Profilo | Guru

>Sì, in effetti la query di ricerca andrebbe migliorata: nel JOIN
>tra la tabella Vendite e la tabella Prodotti c'è tutto quello
>che ci serve, ma forse si deve fare qualche passaggio in più.
>Se voglio sapere la giacenza ad una certa data faccio la SELECT
>SUM(QuantitàRimanente*CostoUnitario) fino a quella data, memorizzando
>il risultato, e una SELECT SUM(QuantitaRimanente*CostoUnitario)
>da quella data in poi, memorizzando sempre il risultato. Sommando
>i risultati ottenuti dalle due SELECT è possibile risalire alla
>giacenza presente nel magazzino in una certa data.
Si tratta di un giro scomodo quando si potrebbe avere il dato pronto a magazzino, non trovi?
Comunque, se non puoi fare altrimenti, devi accrocchiare un po'..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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