D'une période de dates avec quantité à une quantité par jour...
1 réponse
Benoit
Bonjour,
Voici le script de la table et de l'insertion de quelques données :
CREATE TABLE [dbo].[calendrier] (
[id_ca] [int] IDENTITY (1, 1) NOT NULL ,
[dated_ca] [smalldatetime] NOT NULL ,
[datef_ca] [smalldatetime] NOT NULL ,
[qte_ca] [numeric](14, 3) NOT NULL)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/01/2005','25/01/2005',100)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/02/2005','10/02/2005',20)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/01/2005','30/01/2005',60)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('04/01/2005','15/01/2005',150)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/01/2005','02/01/2005',1500)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('15/01/2005','22/01/2005',100)
Pour des prévisions logistiques, je souhaiterai connaître la quantité prévue
par jour, en lissant la
quantité selon le nombre de jour de la période.
C'est à dire,
pour la première ligne, la quantité est divisée par 25 jours, soit 4 par
jour. Donc entre le 01/01/2005 et le 25/01/2005, il y aura 4 quantité à
réaliser. Les sommes de tous les id_ca s'additionnent.
Le résultat final escompté est :
date_ex qte
01/01/2005 4+2+2+750=758
02/01/2005 4+2+2+750=758
03/01/2005 4+2+2=8
...
10/02/2005 ...
Je ne vois pas comment cela est possible par requête même en ayant une table
avec tous les jours de la période.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
Bonjour
Benoit a écrit:
Bonjour,
Voici le script de la table et de l'insertion de quelques données : CREATE TABLE [dbo].[calendrier] ( [id_ca] [int] IDENTITY (1, 1) NOT NULL , [dated_ca] [smalldatetime] NOT NULL , [datef_ca] [smalldatetime] NOT NULL , [qte_ca] [numeric](14, 3) NOT NULL)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/01/2005','25/01/2005',100) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/02/2005','10/02/2005',20) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/01/2005','30/01/2005',60) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('04/01/2005','15/01/2005',150) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/01/2005','02/01/2005',1500) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('15/01/2005','22/01/2005',100)
Pour des prévisions logistiques, je souhaiterai connaître la quantité prévue par jour, en lissant la quantité selon le nombre de jour de la période. C'est à dire, pour la première ligne, la quantité est divisée par 25 jours, soit 4 par jour. Donc entre le 01/01/2005 et le 25/01/2005, il y aura 4 quantité à réaliser. Les sommes de tous les id_ca s'additionnent. Le résultat final escompté est : date_ex qte 01/01/2005 4+2+2+750u8 02/01/2005 4+2+2+750u8 03/01/2005 4+2+2=8 ... 10/02/2005 ...
Je ne vois pas comment cela est possible par requête même en ayant une table avec tous les jours de la période.
et bien c'est simple :
-- création table des jours CREATE TABLE T_PLANNING_PLN (PLN_JOUR DATETIME NOT NULL PRIMARY KEY) GO
SET DATEFORMAT YMD
DECLARE @D DATETIME
SET @D = '2000-01-01'
WHILE @D < '2010-01-01' BEGIN INSERT INTO T_PLANNING_PLN VALUES (@D) SET @D = @D + 1 END GO
-- requête : SELECT PLN_JOUR, SUM(qte_ca / (DATEDIFF(DAY, dated_ca, datef_ca) + 1)) as QUANTITE_LISSEE FROM calendrier C INNER JOIN T_PLANNING_PLN PLN ON PLN.PLN_JOUR BETWEEN dated_ca AND datef_ca GROUP BY PLN_JOUR ORDER BY PLN_JOUR
A lire sur le sujet : http://sqlpro.developpez.com/cours/gestiontemps/
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Bonjour
Benoit a écrit:
Bonjour,
Voici le script de la table et de l'insertion de quelques données :
CREATE TABLE [dbo].[calendrier] (
[id_ca] [int] IDENTITY (1, 1) NOT NULL ,
[dated_ca] [smalldatetime] NOT NULL ,
[datef_ca] [smalldatetime] NOT NULL ,
[qte_ca] [numeric](14, 3) NOT NULL)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/01/2005','25/01/2005',100)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/02/2005','10/02/2005',20)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/01/2005','30/01/2005',60)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('04/01/2005','15/01/2005',150)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('01/01/2005','02/01/2005',1500)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES
('15/01/2005','22/01/2005',100)
Pour des prévisions logistiques, je souhaiterai connaître la quantité prévue
par jour, en lissant la
quantité selon le nombre de jour de la période.
C'est à dire,
pour la première ligne, la quantité est divisée par 25 jours, soit 4 par
jour. Donc entre le 01/01/2005 et le 25/01/2005, il y aura 4 quantité à
réaliser. Les sommes de tous les id_ca s'additionnent.
Le résultat final escompté est :
date_ex qte
01/01/2005 4+2+2+750u8
02/01/2005 4+2+2+750u8
03/01/2005 4+2+2=8
...
10/02/2005 ...
Je ne vois pas comment cela est possible par requête même en ayant une table
avec tous les jours de la période.
et bien c'est simple :
-- création table des jours
CREATE TABLE T_PLANNING_PLN
(PLN_JOUR DATETIME NOT NULL PRIMARY KEY)
GO
SET DATEFORMAT YMD
DECLARE @D DATETIME
SET @D = '2000-01-01'
WHILE @D < '2010-01-01'
BEGIN
INSERT INTO T_PLANNING_PLN VALUES (@D)
SET @D = @D + 1
END
GO
-- requête :
SELECT PLN_JOUR, SUM(qte_ca / (DATEDIFF(DAY, dated_ca, datef_ca) + 1))
as QUANTITE_LISSEE
FROM calendrier C
INNER JOIN T_PLANNING_PLN PLN
ON PLN.PLN_JOUR BETWEEN dated_ca AND datef_ca
GROUP BY PLN_JOUR
ORDER BY PLN_JOUR
Voici le script de la table et de l'insertion de quelques données : CREATE TABLE [dbo].[calendrier] ( [id_ca] [int] IDENTITY (1, 1) NOT NULL , [dated_ca] [smalldatetime] NOT NULL , [datef_ca] [smalldatetime] NOT NULL , [qte_ca] [numeric](14, 3) NOT NULL)
INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/01/2005','25/01/2005',100) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/02/2005','10/02/2005',20) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/01/2005','30/01/2005',60) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('04/01/2005','15/01/2005',150) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('01/01/2005','02/01/2005',1500) INSERT INTO calendrier (dated_ca, datef_ca, qte_ca) VALUES ('15/01/2005','22/01/2005',100)
Pour des prévisions logistiques, je souhaiterai connaître la quantité prévue par jour, en lissant la quantité selon le nombre de jour de la période. C'est à dire, pour la première ligne, la quantité est divisée par 25 jours, soit 4 par jour. Donc entre le 01/01/2005 et le 25/01/2005, il y aura 4 quantité à réaliser. Les sommes de tous les id_ca s'additionnent. Le résultat final escompté est : date_ex qte 01/01/2005 4+2+2+750u8 02/01/2005 4+2+2+750u8 03/01/2005 4+2+2=8 ... 10/02/2005 ...
Je ne vois pas comment cela est possible par requête même en ayant une table avec tous les jours de la période.
et bien c'est simple :
-- création table des jours CREATE TABLE T_PLANNING_PLN (PLN_JOUR DATETIME NOT NULL PRIMARY KEY) GO
SET DATEFORMAT YMD
DECLARE @D DATETIME
SET @D = '2000-01-01'
WHILE @D < '2010-01-01' BEGIN INSERT INTO T_PLANNING_PLN VALUES (@D) SET @D = @D + 1 END GO
-- requête : SELECT PLN_JOUR, SUM(qte_ca / (DATEDIFF(DAY, dated_ca, datef_ca) + 1)) as QUANTITE_LISSEE FROM calendrier C INNER JOIN T_PLANNING_PLN PLN ON PLN.PLN_JOUR BETWEEN dated_ca AND datef_ca GROUP BY PLN_JOUR ORDER BY PLN_JOUR