PDA

View Full Version : [SQL] Calcoli condizionali


Lorenzoz
03-10-2014, 11:46
Un saluto a tutti.

Avrei un problema, per le mie competenze, difficilmente risolvibile. :cry: :cry:
Dunque.
Ho un DB non modificabile, se non con l'aggiunta di tabelle (non posso modificare quelle esistenti).

Problema: ho 3 venditori identificati da un codice univoco interno.
Ricevono un compenso in % (uguale per tutti) dipendente dal fatturato totale del gruppo e dal tipo di vendita.

Cioè le % si applicano con questa logica:

tipo1 | val_limite | %_<_lim | %_>_lim
tipo2 | val_limite | %_<_lim | %_>_lim
tipo3 | val_limite | %_<_lim | %_>_lim

Quindi da una parte ho una tabella che calcola i totali per tipo:
tipo1 | fatturato_tot_tipo1
tipo2 | fatturato_tot_tipo2
tipo3 | fatturato_tot_tipo3

dall'altra una tabella che mi mostra ogni vendita del singolo venditore.

vend1 | cod_prodX | quant_vend | fatt
vend1 | cod_prodY | quant_vend | fatt
vend2 | cod_prodY | quant_vend | fatt
vend2 | cod_prodZ | quant_vend | fatt
vend2 | cod_prodX | quant_vend | fatt
vend3 | cod_prodX | quant_vend | fatt
vend3 | cod_prodY | quant_vend | fatt
vend3 | cod_prodZ | quant_vend | fatt
vend3 | cod_prodK | quant_vend | fatt

Non riesco a collegare le 2 tabelle e applicare quindi la % dovuta al corretto tipo di vendita.
Non so se mi sono spiegato bene. :D

Avrebbe senso salvare i dati della tabella dei totali per tipo in variabili? come posso farlo nel caso?

wingman87
03-10-2014, 12:41
Non e' molto chiaro quello che devi fare... potresti fare un esempio pratico con tutti i calcoli?
Come fai a mettere in relazione le ultime due tabelle se non hanno nulla in comune? Ci sara' una terza tabella che fa da tramite.

Lorenzoz
03-10-2014, 15:00
Non e' molto chiaro quello che devi fare... potresti fare un esempio pratico con tutti i calcoli?
Come fai a mettere in relazione le ultime due tabelle se non hanno nulla in comune? Ci sara' una terza tabella che fa da tramite.

Si, è che speravo ci fosse qualche modo più fine di risolverla. :D

Esempio:
3 venditori:
X
Y
Z

3 tipi di classificazione dei prodotti:
A
B
C

Compenso variabile in base al fatturato complessivo dei 3 venditori:
per il prodotto A prendono il 10% fino a 50000€ e il 7% oltre.
per il prodotto B prendono il 50% fino a 30000€ e il 40% oltre.
per il prodotto C prendono il 10% fino a 10000€ e il 7% oltre.

Quindi se i totali dei fatturati sono:
A=30000€
B=35000€
C=12000€

Il venditore X riceverà:
il 10% dei SUOI prodotti (di tipo A) venduti, il 40% dei SUOI prodotti (di tipo B) venduti, il 7% dei SUOI prodotti (di tipo C) venduti.

Idem per gli altri due, sempre riferito ai pezzi venduti da ogni venditore.

Lorenzoz
03-10-2014, 18:27
Scusate il doppio post.

Sono giunto ad una soluzione, forse macchinosa, ma l'ho raggiunta. Purtroppo al momento sono molto preso e non riesco a postare il giro di query. Appena possibile aggiorno questo messaggio e vi sottopongo un altro dubbio. :sofico: :sofico: :D

Lorenzoz
05-10-2014, 08:33
Dunque la soluzione che ho trovato è stata semplice, non mi era proprio venuta in mente prima.

Ho un tabella che calcola il fatturato, per venditore, e per tipo prodotto.


vend1 | cod_prodX | quant_vend | fatt | tipo_prod |
vend1 | cod_prodY | quant_vend | fatt | tipo_prod |
vend2 | cod_prodY | quant_vend | fatt | tipo_prod |
vend2 | cod_prodZ | quant_vend | fatt | tipo_prod |
vend2 | cod_prodX | quant_vend | fatt | tipo_prod |
vend3 | cod_prodX | quant_vend | fatt | tipo_prod |
vend3 | cod_prodY | quant_vend | fatt | tipo_prod |
vend3 | cod_prodZ | quant_vend | fatt | tipo_prod |
vend3 | cod_prodK | quant_vend | fatt | tipo_prod |

E una seconda tabella, raggruppata per tipo (quindi 3 righe totali), con 3 condizioni di IIF.
IIf(tipo_prod)="A";IIf(fatt)<=50000;0,1;0,07);0)
IIf(tipo_prod)="B";IIf(fatt)<=30000;0,5;0,4);0)
IIf(tipo_prod)="C";IIf(fatt)<=10000;0,1;0,07);0)

il risultato è una matrice con tutti 0 tranne le celle dove trova corrispondenza del tipo prodotto e quindi estrae la % corretta.

Una 3a query unisce le due precedenti per tipo_prod e applica le percentuali ai fatturati dei singoli venditori.


Veniamo al nuovo dubbio che ho.
Ho un altro gruppo di venditori che ha un contratto differente.
Anche in questo caso prendono l'X% in base ad un valore limite, per tutti i componenti del gruppo.
Tuttavia questo limite si resetta ogni mese!! :muro: :mc: :muro: :mc:
Quindi quando eseguo le estrazioni per un singolo mese non ho problemi, ma se volessi un riassuntivo annuale dovrei tenere conto, ad esempio:

Fatturato Gennaio: 5000€
Fatturato Febbraio: 20000€
Fatturato Marzo: 30000€
Fatturato Maggio: 28000€
Fatturato Giugno: 25000€
Fatturato Luglio: 27000€
Fatturato Agosto: 8000€
...

Con compenso comune stabilito di: 30% sotto i 10000€ e del 25% oltre, per ogni mese. Quindi:
30% a gennaio
25% a febbraio
25% a marzo
25% ad aprile
25% a maggio
25% a giugno
25% a luglio
30% ad agosto