Problema Query

domenica 18 luglio 2010 - 18.48
Tag Elenco Tags  VB.NET

luxsor Profilo | Guru

Ciao a tutti,
ho il seguente problema:

Struttura DB SQL Server 2005 Express

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ho bisogno di calcolare sul valore PREZZO i rispettivi sconti (in percentuale) in successione, cioè al
PREZZO applico lo SCONTO1, da quello che ottengo applico lo SCONTO2 e da quello che ottengo ancora applico lo SCONTO3.

Spero di essere stato abbastanza chiaro.

Ciao


---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick

lbenaglia Profilo | Guru

>Spero di essere stato abbastanza chiaro.
Qual è il result set che vuoi ottenere con i dati che hai postato?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

luxsor Profilo | Guru

ID PREZZO QT SCONTO1 SCONTO2 SCONTO3
1 15,00 5 0 0 0
2 55,50 2 50 0 0
3 25,00 10 30 20 10

Questo è quello che voglio ottenere
RISULTATO ID TOTALE 1 15 2 27,75 3 12,6
Grazie
---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick

dinoxet Profilo | Senior Member

Tabella :
1 15,00 5 0 0 0
2 55,50 2 50 0 0
3 25,00 10 30 20 10

select case when sconto1=0 and sconto2=0 and sconto3=0 then prezzo when sconto1>0 and scont2>0 and sconto3>0 then ((prezzo / (1+sconto1/100) ) / (1+sconto2/100)) / (1+sconto3/100) when sconto1>0 and scont2>0 and sconto3=0 then ((prezzo / (1+sconto1/100) ) / (1+sconto2/100)) else (prezzo / (1+sconto1/100) from tabella


dovrfebbe funzionare
DINOXET
__________________________________________
impossible is only a word

luxsor Profilo | Guru

Non funziona.

---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick

dinoxet Profilo | Senior Member

select case when sconto1=0 and sconto2=0 and sconto3=0 then prezzo when sconto1>0 and scont2>0 and sconto3>0 then ((prezzo - (prezzo * sconto1/100) ) - (prezzo*sconto2/100)) - (prezzo*sconto3/100) when sconto1>0 and scont2>0 and sconto3=0 then ((prezzo - (prezzo*sconto1/100) ) - (prezzo*sconto2/100)) else (prezzo - (prezzo*sconto1/100) from tabella



DINOXET
__________________________________________
impossible is only a word

luxsor Profilo | Guru

CIao Armando,
il problema è dovuto al fatto che lo SCONTO2 e lo SCONTO3 non devono essere calcolati sul campo PREZZO ma sul risultato dell'operazione precedente.

RISULTATO ID TOTALE 1 15 2 27,75 3 12,6

La query non funziona quando sono presenti più sconti.


---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick

dinoxet Profilo | Senior Member

select case when sconto1=0 and sconto2=0 and sconto3=0 then prezzo when sconto1>0 and scont2>0 and sconto3>0 then ((prezzo - (prezzo * sconto1/100) ) - ((prezzo - (prezzo * sconto1/100) )*sconto2/100)) - (((prezzo - (prezzo * sconto1/100) )*sconto2/100))*sconto3/100) when sconto1>0 and scont2>0 and sconto3=0 then ((prezzo - (prezzo*sconto1/100) ) - ((prezzo - (prezzo * sconto1/100) )*sconto2/100)) else (prezzo - (prezzo*sconto1/100) from tabella

di un po' cosi'


DINOXET
__________________________________________
impossible is only a word

luxsor Profilo | Guru

Con il 2° sconto ci siamo, ma con il 3° NO.


---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick

dinoxet Profilo | Senior Member

SELECT id, prezzo, qta, sconto1, sconto2, sconto3,
CASE WHEN sconto1 = 0 AND sconto2 = 0 AND sconto3 = 0
THEN prezzo
WHEN sconto1 > 0 AND sconto2 > 0 AND sconto3 > 0
THEN (((prezzo - (prezzo * sconto1 / 100))) - ((prezzo - (prezzo * sconto1 / 100)) * sconto2 / 100))
- ((((prezzo - (prezzo * sconto1 / 100))) - ((prezzo - (prezzo * sconto1 / 100)) * sconto2 / 100)) * sconto3 / 100)
WHEN sconto1 > 0 AND sconto2 > 0 AND sconto3 = 0
THEN (prezzo - (prezzo * sconto1 / 100)) - ((prezzo - (prezzo * sconto1 / 100)) * sconto2 / 100)
ELSE prezzo - (prezzo * sconto1 / 100)
END AS calcolo
FROM dbo.tempo

QUESTA A ME FUNZIONA.
DINOXET
__________________________________________
impossible is only a word

luxsor Profilo | Guru

Perfetto così funziona.
L'ultima cosa:
Se volessi avere la somma totale di tutta la tabella SUM() calcolata tenendo conto anche della quantità ?
(Prezzo * QT) SCONTO1 SCONTO2 SCONTO3

Grazie

---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick

dinoxet Profilo | Senior Member

select sum(calcolo)as sommacalcolo
from
(SELECT id, prezzo, qta, sconto1, sconto2, sconto3,
CASE WHEN sconto1 = 0 AND sconto2 = 0 AND sconto3 = 0
THEN prezzo * qta
WHEN sconto1 > 0 AND sconto2 > 0 AND sconto3 > 0
THEN ((((prezzo - (prezzo * sconto1 / 100))) - ((prezzo - (prezzo * sconto1 / 100)) * sconto2 / 100))
- ((((prezzo - (prezzo * sconto1 / 100))) - ((prezzo - (prezzo * sconto1 / 100)) * sconto2 / 100)) * sconto3 / 100)) * qta
WHEN sconto1 > 0 AND sconto2 > 0 AND sconto3 = 0
THEN ((prezzo - (prezzo * sconto1 / 100)) - ((prezzo - (prezzo * sconto1 / 100)) * sconto2 / 100))* qta
ELSE (prezzo - (prezzo * sconto1 / 100)) * qta
END AS calcolo
FROM dbo.tempo) as tempos

così va!!
DINOXET
__________________________________________
impossible is only a word

luxsor Profilo | Guru

Perfetto. Grazie 1000
A buon rendere

---------------------------------
Carmelo Cavallo | Luxsor

http://www.sviluppodotnet.it/
http://www.sviluppodotnet.it/agencyclick
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