Bonjour à tous
j'ai deux tables dont voici la description simplifiée :
Nomenclature
IDART
IDARTFILS
QTEet le jeu d'essai suivant :Tarif
IDART
DATEPRIX
PRIX
Nomenclature
1,2,2
1,3,1A partir de ce jeu d'essai j'aimerai insérer une nouvelle ligne dans tarif correspondant à la somme des prix des composants les plus récents ayant la date de tarif <= à une date x. La date de cette nouvelle ligne doit correspondre à la plus grande date de tarif trouvée sur les composants.Tarif
2,1/10/2011,5
2,15/10/2011,6
2,27/10/2011,7
3,1/10/2011,2
3,25/10/2011,3
3,5/11/2011,4
J'arrive à faire la requête pour calculer les valeurs :
Ce qui me donne un prix de 17 (7*2 + 3 * 1) avec une date au 27/10/2011
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 WITH TMP_TARIF(IDART, DATEPRIX) AS (SELECT T.IDART, MAX(T.DATEPRIX) FROM T_TARIF T WHERE T.DATEPRIX <= { d '2011-10-30'} GROUP BY T.IDART) SELECT SUM(T.PRIX * D.QTE), MAX(T.DATEPRIX) FROM T_TARIF T JOIN T_NOMENCLATURE D ON T.IDART = D.IDARTFILS JOIN TMP_TARIF T2 ON T2.IDART = T.IDART AND T.DATEPRIX = T2.DATEPRIX WHERE D.IDART = 1
mais pour insérer la ligne dans la table ou alors la mettre à jour si celle ci existe déjà ... je sèche !
Le but ultime étant de maintenir le prix de l'article composé via des triggers lors que l'on modifie la table nomenclature (ajout d'un composant, modif quantité ...) ou modifie la table des tarifs (ajout d'un prix, modif du tarif ...)
pour info je suis en SQL SERVER 2005
Merci
Partager