Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2011, 15h48   #1
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 54
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 54
Points : 25
Points : 25
Par défaut Mise à jour récursive.

Bonjour,

Je dois réaliser une requête de mise à jour récursive.
Le stock se calcule en soustrayant une consommation à la quantité en stock du jour précédent
Le but du jeu est de calculer une colonne stock comme dans l'exemple ci dessous.

Produit Date Conso Stock
PR01 20110201 0 50
PR01 20110202 3 47
PR01 20110203 5 42
PR01 20110204 2 40

Je sais que ce genre de problème doit se résoudre avec une CTE mais j'ai du mal à concevoir ma requete.

Avez vous une piste ?

Merci
achestyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h19   #2
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 54
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 54
Points : 25
Points : 25
Hello

Je crois que j'ai trouvé la solution...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
WITH PARCOURS (ID,CODEARTICLE,CONSO,NAT_PF,STOCKENCOURS,DAtejour,S)
AS 
(
SELECT ID,CODEARTICLE,CONSO,DAtejour,1000 AS S 
	FROM PREVI WHERE DATEJOUR=(SELECT min(DateJour) FROM previ)
UNION ALL
SELECT P.ID,P.CODEARTICLE,P.CONSO,P.DAtejour,Parcours.S-P.Conso AS S 
	FROM PREVI P 
	INNER JOIN Parcours ON (P.DAtejour-1=PARCOURS.DATEJOUR AND P.CODEARTICLE=PARCOURS.CODEARTICLE )
)
SELECT * FROM PARCOURS
achestyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h32   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Sans connaitre la structure de vos tables voici de quoi vous lancer:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
WITH  
	   Produits(idProduit, DateProduit,conso)
	   AS (SELECT idProduit, DateProduit,conso, ordre
		   FROM   dbo.Produits
		   WHERE  DateProduit=@datedepart
		  UNION ALL
		   SELECT P.idProduit, P.DateProduit,P.conso, (P.ordre-T.conso) AS conso
		   FROM   dbo.Produits P
		   INNER JOIN Produits T
			  ON P.idProduit= T.idProduit AND DATEDIFF(day,T.DateProduit,P.dateproduit)=1
                     WHERE P.dateProduit<=CONVERT(DATE,GETDATE()))
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h33   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
pardon je n'avais pas vu votre réponse
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h47   #5
Nouveau Membre du Club
 
Inscription : mars 2005
Messages : 54
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 54
Points : 25
Points : 25
Mercvi à toi iberserk !
achestyx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h20.


 
 
 
 
Partenaires

Hébergement Web