Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

D'une période de dates avec quantité à une quantité par jour...

1 réponse
Avatar
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.

Merci pour votre aide
--
Benoit

1 réponse

Avatar
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

PLN_JOUR QUANTITE_LISSEE
--------------------------- ----------------------
2005-01-01 00:00:00.000 756.00000000000000
2005-01-02 00:00:00.000 756.00000000000000
2005-01-03 00:00:00.000 6.00000000000000
2005-01-04 00:00:00.000 18.50000000000000
2005-01-05 00:00:00.000 18.50000000000000
2005-01-06 00:00:00.000 18.50000000000000
2005-01-07 00:00:00.000 18.50000000000000
2005-01-08 00:00:00.000 18.50000000000000
2005-01-09 00:00:00.000 18.50000000000000
2005-01-10 00:00:00.000 18.50000000000000
2005-01-11 00:00:00.000 18.50000000000000
2005-01-12 00:00:00.000 18.50000000000000
2005-01-13 00:00:00.000 18.50000000000000
2005-01-14 00:00:00.000 18.50000000000000
2005-01-15 00:00:00.000 31.00000000000000
2005-01-16 00:00:00.000 18.50000000000000
2005-01-17 00:00:00.000 18.50000000000000
2005-01-18 00:00:00.000 18.50000000000000
2005-01-19 00:00:00.000 18.50000000000000
2005-01-20 00:00:00.000 18.50000000000000
2005-01-21 00:00:00.000 18.50000000000000
2005-01-22 00:00:00.000 18.50000000000000
2005-01-23 00:00:00.000 6.00000000000000
2005-01-24 00:00:00.000 6.00000000000000
2005-01-25 00:00:00.000 6.00000000000000
2005-01-26 00:00:00.000 2.00000000000000
2005-01-27 00:00:00.000 2.00000000000000
2005-01-28 00:00:00.000 2.00000000000000
2005-01-29 00:00:00.000 2.00000000000000
2005-01-30 00:00:00.000 2.00000000000000
2005-02-01 00:00:00.000 2.00000000000000
2005-02-02 00:00:00.000 2.00000000000000
2005-02-03 00:00:00.000 2.00000000000000
2005-02-04 00:00:00.000 2.00000000000000
2005-02-05 00:00:00.000 2.00000000000000
2005-02-06 00:00:00.000 2.00000000000000
2005-02-07 00:00:00.000 2.00000000000000
2005-02-08 00:00:00.000 2.00000000000000
2005-02-09 00:00:00.000 2.00000000000000
2005-02-10 00:00:00.000 2.00000000000000


Merci pour votre aide



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 *************************