OVH Cloud OVH Cloud

Colle pour les bons en SQL

4 réponses
Avatar
jeorme
Bonjour à tous.

J'ai une appli pour la saisie de note de frais. J'ai une table dans laquelle
est stocké le nom de la personne et ses KM parcouru dans l'année.

Quand l'employé saisie une note il rentre son nombre de KM parcouru pour
cette note.

Par ex:

TABLE_CUMUL:
nom KM_annuel
MARTIN 4988



NOTE

nom DATE KM_parcouru
MARTIN 12/05/05 152


Mon prob est que j'ai un taux en fonction des KM parcouru dans l'année:

TAUX:
classe nb_max taux
A 5000 2
B 20000 1
C 999999 0.5


Donc je voudrais un reqte SQL qui me donne:


NOM TRANCHE TAUX NB_KM
MARTIN A 2 12
MARTIN B 1 140


c'est à dire que pour ma tranche A j'ai 5000 (max de tranche A) - 4988 = 12
qui vont en tranche A
et ensuite 152-12 = 140 qui eu sont en tranche B

Bien sur pour s'il ça faisait plus que 20000 il fadrait en passer sur la
tranche C.

Je ne vois pas comment faire ça en SQL.


Merci d'avance.

4 réponses

Avatar
Sylvain Lafontaine
Utilisez un Case:

Case When SumOfKm > 20000 Then 25000 + (SumOfKm - 20000) * 0.5 When
SumOfKm > 5000 Then 10000 + (SumOfKm - 5000) Else SumOfKm * 2 End as
FraisKilometrage

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC


"jeorme" wrote in message
news:uDvc$
Bonjour à tous.

J'ai une appli pour la saisie de note de frais. J'ai une table dans
laquelle
est stocké le nom de la personne et ses KM parcouru dans l'année.

Quand l'employé saisie une note il rentre son nombre de KM parcouru pour
cette note.

Par ex:

TABLE_CUMUL:
nom KM_annuel
MARTIN 4988



NOTE

nom DATE KM_parcouru
MARTIN 12/05/05 152


Mon prob est que j'ai un taux en fonction des KM parcouru dans l'année:

TAUX:
classe nb_max taux
A 5000 2
B 20000 1
C 999999 0.5


Donc je voudrais un reqte SQL qui me donne:


NOM TRANCHE TAUX NB_KM
MARTIN A 2 12
MARTIN B 1 140


c'est à dire que pour ma tranche A j'ai 5000 (max de tranche A) - 4988 =
12
qui vont en tranche A
et ensuite 152-12 = 140 qui eu sont en tranche B

Bien sur pour s'il ça faisait plus que 20000 il fadrait en passer sur la
tranche C.

Je ne vois pas comment faire ça en SQL.


Merci d'avance.






Avatar
Sylvain Lafontaine
Oubliez ma réponse précédente, je n'avais pas lu que vous vouliez ventiler
le résultat final en plusieurs records.

Pour créer votre nombre variable d'enregistrement par personne, utilisez une
table temporaire pour stocker vos résultats à l'aide d'une procédure stockée
ou sinon faites un join cartésien sur une table supplémentaire comportant 3
lignes (peut importe les valeurs de ces 3 lignes) et ajouter une clause
Where pour valider l'ajout de chacune de ces trois lignes.

Vous pouvez également deux UNIONS sur trois requêtes SQL mais j'aime moins
ça.

Finalement, je ne comprends pas votre exemple de calcul pour avoir 12 et 140
Km en valeurs finales si votre usager a parcouru un minimum de 4988 Km
durant l'année.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC


"jeorme" wrote in message
news:uDvc$
Bonjour à tous.

J'ai une appli pour la saisie de note de frais. J'ai une table dans
laquelle
est stocké le nom de la personne et ses KM parcouru dans l'année.

Quand l'employé saisie une note il rentre son nombre de KM parcouru pour
cette note.

Par ex:

TABLE_CUMUL:
nom KM_annuel
MARTIN 4988



NOTE

nom DATE KM_parcouru
MARTIN 12/05/05 152


Mon prob est que j'ai un taux en fonction des KM parcouru dans l'année:

TAUX:
classe nb_max taux
A 5000 2
B 20000 1
C 999999 0.5


Donc je voudrais un reqte SQL qui me donne:


NOM TRANCHE TAUX NB_KM
MARTIN A 2 12
MARTIN B 1 140


c'est à dire que pour ma tranche A j'ai 5000 (max de tranche A) - 4988 =
12
qui vont en tranche A
et ensuite 152-12 = 140 qui eu sont en tranche B

Bien sur pour s'il ça faisait plus que 20000 il fadrait en passer sur la
tranche C.

Je ne vois pas comment faire ça en SQL.


Merci d'avance.






Avatar
jeorme
en fait il a parcouru actuellement 4988 km, il fait une nouvelle note de
frais avec 152 km supplémentaires.
Donc je vais y rembourser en tranche A -> 5000 (maxi tranche A) - 4988 = 12
ensuite il me reste donc 152-12 à ventiler soir 140 qui passeront en tranche
B et mon cumul annuel à 4988+152



"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)> a
écrit dans le message de news: #L2B$
Oubliez ma réponse précédente, je n'avais pas lu que vous vouliez ventiler
le résultat final en plusieurs records.

Pour créer votre nombre variable d'enregistrement par personne, utilisez


une
table temporaire pour stocker vos résultats à l'aide d'une procédure


stockée
ou sinon faites un join cartésien sur une table supplémentaire comportant


3
lignes (peut importe les valeurs de ces 3 lignes) et ajouter une clause
Where pour valider l'ajout de chacune de ces trois lignes.

Vous pouvez également deux UNIONS sur trois requêtes SQL mais j'aime moins
ça.

Finalement, je ne comprends pas votre exemple de calcul pour avoir 12 et


140
Km en valeurs finales si votre usager a parcouru un minimum de 4988 Km
durant l'année.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC


"jeorme" wrote in message
news:uDvc$
> Bonjour à tous.
>
> J'ai une appli pour la saisie de note de frais. J'ai une table dans
> laquelle
> est stocké le nom de la personne et ses KM parcouru dans l'année.
>
> Quand l'employé saisie une note il rentre son nombre de KM parcouru pour
> cette note.
>
> Par ex:
>
> TABLE_CUMUL:
> nom KM_annuel
> MARTIN 4988
>
>
>
> NOTE
>
> nom DATE KM_parcouru
> MARTIN 12/05/05 152
>
>
> Mon prob est que j'ai un taux en fonction des KM parcouru dans l'année:
>
> TAUX:
> classe nb_max taux
> A 5000 2
> B 20000 1
> C 999999 0.5
>
>
> Donc je voudrais un reqte SQL qui me donne:
>
>
> NOM TRANCHE TAUX NB_KM
> MARTIN A 2 12
> MARTIN B 1 140
>
>
> c'est à dire que pour ma tranche A j'ai 5000 (max de tranche A) - 4988 > > 12
> qui vont en tranche A
> et ensuite 152-12 = 140 qui eu sont en tranche B
>
> Bien sur pour s'il ça faisait plus que 20000 il fadrait en passer sur la
> tranche C.
>
> Je ne vois pas comment faire ça en SQL.
>
>
> Merci d'avance.
>
>
>
>




Avatar
Dominique
il faut ajouter dans ta table taux un km_min et un km_max
Classe Km_min KM_max Taux
A 0 4999 2
B 5000 19999 1
C 20000 999999 0.5

select
Table_cumul.nom,
Taux.classe,
Taux.taux
case
when Table_cumul.KM_annuel+Note.Km_parcouru > Taux.KM_max
then Taux.KM_max - Note.Km_parcouru
when Table_cumul.KM_annuel < Taux.KM_min
then Taux.KM_min - Table_cumul.KM_annuel+Note.Km_parcouru
else Note.Km_parcouru
end
from
Table_cumul,
Note,
Taux
where
Table_cumul.Nom = Note.nom
and (
table_cumul.Km_annuel
between Taux.km_min and taux.km_max
or table_cumul.Km_annuel+note.KM_parcouru
between Taux.km_min and taux.km_max
)

jeorme a écrit :
Bonjour à tous.

J'ai une appli pour la saisie de note de frais. J'ai une table dans laquelle
est stocké le nom de la personne et ses KM parcouru dans l'année.

Quand l'employé saisie une note il rentre son nombre de KM parcouru pour
cette note.

Par ex:

TABLE_CUMUL:
nom KM_annuel
MARTIN 4988



NOTE

nom DATE KM_parcouru
MARTIN 12/05/05 152


Mon prob est que j'ai un taux en fonction des KM parcouru dans l'année:

TAUX:
classe nb_max taux
A 5000 2
B 20000 1
C 999999 0.5


Donc je voudrais un reqte SQL qui me donne:


NOM TRANCHE TAUX NB_KM
MARTIN A 2 12
MARTIN B 1 140


c'est à dire que pour ma tranche A j'ai 5000 (max de tranche A) - 4988 = 12
qui vont en tranche A
et ensuite 152-12 = 140 qui eu sont en tranche B

Bien sur pour s'il ça faisait plus que 20000 il fadrait en passer sur la
tranche C.

Je ne vois pas comment faire ça en SQL.


Merci d'avance.