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 09/12/2011, 11h28   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Par défaut Récupérer résultat de la ligne précédente

Bonjour à tous,

Je débute en SQL et je suis amené à en faire de manière très occasionnelle.
Aujourd'hui je doit réaliser une requete permettant de faire un cumul progressif.

Voici ma table mon resultat de requete :
MOIS OUVERTS CLOS STOCK
--------------------------------------------------------
1 10 8 2
2 5 6 1
3 3 9 -5
etc.
Pourriez vous m'aiguiller vers une fonction qui me permettrait d'obtenir la colonne STOCK svp ???
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 16h32   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
Bonjour,

Tout simplement :

Code :
1
2
SELECT STOCK
FROM dbo.maTable
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 17h03   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
J'aurai bien voulu que la solution soit si simple mais ma colonne STOCK doit être calculée à partir des colonnes OUVERTS et CLOS
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 02h41   #4
Invité de passage
 
Homme
chef de projet produit
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : chef de projet produit
Secteur : Finance

Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 3
Points : 3
l'utilisation d'une fonction n'est pas forçément appropriée .
quelle est la regle de calcul du stock ?

sur la 1ere ligne , on pense stock = ouvert - clos
sur la deuxieme , c'est le contraire :stock = clos - ouvert
sur la troisime, rien ne marche...
pradiergael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h55   #5
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
la regle de calcul du stock est la suivante

sur la 1ere ligne , stock = ouvert - clos
sur la deuxieme , stock = ouvert - clos + (stock 1ère ligne)
sur la troisime, stock = ouvert - clos + (stock 2ème ligne)
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h09   #6
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Code :
SELECT sum(ouvert-clos) FROM dbo.matable
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h42   #7
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Le SUM me renvoie un message d'erreur :
"Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête."

Car les ouverts et clos sont obtenus à partir de COUNT
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h44   #8
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Ah... Ca change pas mal de choses...

Il serait p-e utile de poster la structure de votre table.
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h02   #9
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Voici la requête me permettant d'obtenir le delta mois par mois :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
     MONTH(PLANNINGS.D_JOUR) AS MOIS,
     COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = '1' AND OUVERTURES.I_APP_ENVIRONN = '2' AND OUVERTURES.C_EQUIPE <> '3' THEN OUVERTURES.IDT_APPEL ELSE NULL END) - COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = '1' AND CLOTURES.I_APP_ENVIRONN = '2' AND CLOTURES.C_EQUIPE <> '3' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS DELTA
FROM
     APPEL AS OUVERTURES RIGHT OUTER JOIN
     PLANNINGS ON CONVERT(Char(10), OUVERTURES.D_APPEL, 103) = CONVERT(Char(10), PLANNINGS.D_JOUR, 103) LEFT OUTER JOIN
     APPEL AS CLOTURES ON CONVERT(Char(10), PLANNINGS.D_JOUR, 103) = CONVERT(Char(10), CLOTURES.D_CLOTTECH, 103)
WHERE
     (YEAR(PLANNINGS.D_JOUR) = YEAR(CURRENT_TIMESTAMP))
GROUP BY
     MONTH(PLANNINGS.D_JOUR)
ORDER BY
     MOIS
Voici le résultat de la requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
1	16
2	-101
3	-2
4	-9
5	-4
6	94
7	89
8	-69
9	-109
10	-6
11	-24
12	-10
Le résultat attendu est le suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
1	16
2	-85 (16-101)
3	-87 (16-101-2)
4	-96 (16-101-2-9)
5	-100 (16-101-2-9-4)
6	-6 (16-101-2-9-4+94)
7	83 (16-101-2-9-4+94+89)
8	14 (16-101-2-9-4+94+89-69)
9	-95 (16-101-2-9-4+94+89-69-109)
10	-101 (16-101-2-9-4+94+89-69-109-6)
11	-125 (16-101-2-9-4+94+89-69-109-6-24)
12	-135 (16-101-2-9-4+94+89-69-109-6-24-10)
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h15   #10
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Ok et donc si j'ai bien compris, il vous faut maintenant la somme des stocks de chaque mois.

Ce n'est surement pas la méthode la plus propre/performante (je laisse le soin à elsuket et sqlpro (ou autres, je ne voudrais vexer personne^^) de vous la donner/proposer ^^) mais si vous êtes dans l'urgence du résultat, une manière rapide de l'obtenir est de travailler avec une CTE (Common Table Expression).

Code :
1
2
3
4
5
WITH T1 (mois, stock) AS (
--placez ici votre requête
)
 
SELECT SUM(stock) FROM T1
edit : D'après votre édition, il semblerait que ce ne soit pas ce que vous recherchez (ma requête vous donne le résultat de la dernière ligne)... Je cogite ^^
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h22   #11
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Citation:
Envoyé par griftou Voir le message
D'après votre édition, il semblerait que ce ne soit pas ce que vous recherchez (ma requête vous donne le résultat de la dernière ligne)... Je cogite ^^
Merci beaucoup de l'intérêt que vous portez à ma recherche !
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h59   #12
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Voilà, j'ai planché un peu sur ce problème (j'aime bien les énigmes^^) et je suis arrivé à ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
create table #tmp(
	mois int,
	stock int)

insert into #tmp (mois,stock) values (1,16)
insert into #tmp (mois,stock) values (2,-101)
insert into #tmp (mois,stock) values (3,-2)
insert into #tmp (mois,stock) values (4,-9)
insert into #tmp (mois,stock) values (5,-4)
insert into #tmp (mois,stock) values (6,94)
insert into #tmp (mois,stock) values (7,89)
insert into #tmp (mois,stock) values (8,-69)
insert into #tmp (mois,stock) values (9,-109)
insert into #tmp (mois,stock) values (10,-6)
insert into #tmp (mois,stock) values (11,-24)
insert into #tmp (mois,stock) values (12,-10)

select 
	a.mois,
	(select sum(b.stock) from #tmp b where b.mois <= a.mois)
from 
	#tmp a


drop table #tmp
Ce script crée donc une table temporaire contenant les valeurs retournées par votre requête. Je fais ensuite un select sur cette table.

Donc, si je ne suis pas dans l'erreur, vous pouvez utiliser une CTE à la place de ma table temporaire comme dans mon exemple précédent.

Vous n'avez plus qu'à faire la requête indiquée en grand en remplaçant #tmp par le nom de votre CTE.

Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h24   #13
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Je viens d'essayer la requete, en revanche elle tombe en timeout si je la lance à partir du concepteur de requete.

(Pour info, je travaille sous SSRS)
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h29   #14
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Etrange ce timeout...

Votre requête de base (celle qui fourni le delta par mois) s'exécute sans problème ? Dans quel délai ?

Donnez également le code exact de la requête qui vous donne le timeout (on ne sait jamais^^)
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h01   #15
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
La requete de base est assez rapide (env 2sec.)

Je lance la requete dans le gestionnaire de rapport SSRS (en Web), je mesure le temps de réponse.

Résultat : 1min40s

Mais les résultats sont là !!

Merci bcp
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h09   #16
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Si votre requête qui fournit le delta ne prend que 2 secondes, l'ensemble ne devrait pas fournir de timeout.

Que faites-vous exactement ?

Edit :

Pour être complet, vous devriez avoir quelque chose dans ce goût là.
Code :
1
2
3
4
5
6
7
8
9
10
 
WITH T1(mois, stock) AS (
--la requête qui fourni le delta
)
 
SELECT 
	a.mois,
	(SELECT sum(b.stock) FROM T1 b WHERE b.mois <= a.mois)
FROM 
	T1 a
Cela ne devrait donc vraiment pas prendre longtemps.
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 17h00   #17
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Vu que mon graphe SSRS doit renvoyer également les OUVERTS et les CLOS j'ai fait un UNION, voici la requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
WITH T1(MOIS, STOCKS) AS
	(SELECT
		MONTH(PLANNINGS.D_JOUR) AS MOIS,
		COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = 'INC' AND OUVERTURES.C_EQUIPE <> 'HDBANQUE' THEN OUVERTURES.IDT_APPEL ELSE NULL END) - COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = 'INC' AND CLOTURES.I_APP_ENVIRONN = 'Production' AND CLOTURES.C_EQUIPE <> 'HDBANQUE' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS DELTA
	FROM
		APPEL AS OUVERTURES RIGHT OUTER JOIN
		PLANNINGS ON CONVERT(Char(10), OUVERTURES.D_APPEL, 103) = CONVERT(Char(10), PLANNINGS.D_JOUR, 103) LEFT OUTER JOIN
		APPEL AS CLOTURES ON CONVERT(Char(10), PLANNINGS.D_JOUR, 103) = CONVERT(Char(10), CLOTURES.D_CLOTTECH, 103)
	WHERE
		(YEAR(PLANNINGS.D_JOUR) = YEAR(CURRENT_TIMESTAMP))
	GROUP BY MONTH(PLANNINGS.D_JOUR))
 
SELECT
	MOIS, 0 AS OUVERTS, 0 AS CLOS,(SELECT SUM(STOCKS) AS STOCKS FROM T1 AS b WHERE (MOIS <= a.MOIS)) AS STOCK
FROM
	T1 AS a
GROUP BY MOIS
 
UNION
 
SELECT
	MONTH(PLANNINGS_1.D_JOUR) AS MOIS,
	COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = 'INC' AND OUVERTURES.I_APP_ENVIRONN = 'Production' AND OUVERTURES.C_EQUIPE <> 'HDBANQUE' THEN OUVERTURES.IDT_APPEL ELSE NULL END) AS OUVERTS,
	COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = 'INC' AND CLOTURES.I_APP_ENVIRONN = 'Production' AND CLOTURES.C_EQUIPE <> 'HDBANQUE' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS CLOS,
	0 AS STOCK
FROM
	APPEL AS OUVERTURES RIGHT OUTER JOIN
	PLANNINGS AS PLANNINGS_1 ON CONVERT(char(10), OUVERTURES.D_APPEL, 103) = CONVERT(char(10), PLANNINGS_1.D_JOUR, 103) LEFT OUTER JOIN
	APPEL AS CLOTURES ON CONVERT(char(10), PLANNINGS_1.D_JOUR, 103) = CONVERT(char(10), CLOTURES.D_CLOTTECH, 103)
WHERE
	YEAR(PLANNINGS_1.D_JOUR) = YEAR(CURRENT_TIMESTAMP)
GROUP BY
	MONTH(PLANNINGS_1.D_JOUR)
En revanche, je ne parviens pas à faire de GROUP BY sur mon UNION, il me renvoie une erreur.
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 18h05   #18
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
J'ai solutionné mon pb de la manière suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
WITH T1(MOIS, STOCKS) AS 
	(SELECT
		MONTH(PLANNINGS.D_JOUR) AS MOIS,
		COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = 'INC' AND OUVERTURES.C_EQUIPE <> 'HDBANQUE' THEN OUVERTURES.IDT_APPEL ELSE NULL END) - COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = 'INC' AND CLOTURES.I_APP_ENVIRONN = 'Production' AND CLOTURES.C_EQUIPE <> 'HDBANQUE' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS DELTA
	FROM
		APPEL AS OUVERTURES RIGHT OUTER JOIN 
		PLANNINGS ON CONVERT(Char(10), OUVERTURES.D_APPEL, 103) = CONVERT(Char(10), PLANNINGS.D_JOUR, 103) LEFT OUTER JOIN APPEL AS CLOTURES ON CONVERT(Char(10), PLANNINGS.D_JOUR, 103) = CONVERT(Char(10), CLOTURES.D_CLOTTECH, 103)
	WHERE
		YEAR(PLANNINGS.D_JOUR) = YEAR(CURRENT_TIMESTAMP)
	GROUP BY
		MONTH(PLANNINGS.D_JOUR)
	)
 
SELECT
	T2.MOIS,
	SUM(T3.OUVERTS) AS OUVERTS,
	SUM(T3.CLOS) AS CLOS,
	SUM(T2.STOCK) AS STOCK
FROM
	(SELECT
		MOIS,
		0 AS OUVERTS,
		0 AS CLOS,
		(SELECT
			SUM(STOCKS) AS STOCKS
		FROM
			T1 AS b
		WHERE
			MOIS <= a.MOIS
		) AS STOCK
	FROM T1 AS a
	GROUP BY MOIS
	) AS T2 INNER JOIN
 
	(SELECT
		MONTH(PLANNINGS_1.D_JOUR) AS MOIS,
		COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = 'INC' AND OUVERTURES.I_APP_ENVIRONN = 'Production' AND OUVERTURES.C_EQUIPE <> 'HDBANQUE' THEN OUVERTURES.IDT_APPEL ELSE NULL END) AS OUVERTS, 
		COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = 'INC' AND CLOTURES.I_APP_ENVIRONN = 'Production' AND CLOTURES.C_EQUIPE <> 'HDBANQUE' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS CLOS,
		0 AS STOCK
	FROM
		APPEL AS OUVERTURES RIGHT OUTER JOIN
		PLANNINGS AS PLANNINGS_1 ON CONVERT(char(10), OUVERTURES.D_APPEL, 103) = CONVERT(char(10), PLANNINGS_1.D_JOUR, 103) LEFT OUTER JOIN
		APPEL AS CLOTURES ON CONVERT(char(10), PLANNINGS_1.D_JOUR, 103) = CONVERT(char(10), CLOTURES.D_CLOTTECH, 103)
	WHERE
		YEAR(PLANNINGS_1.D_JOUR) = YEAR(CURRENT_TIMESTAMP)
	GROUP BY
		MONTH(PLANNINGS_1.D_JOUR)
	) AS T3 ON T2.MOIS = T3.MOIS
GROUP BY T2.MOIS
Un grand merci à tous ceux qui ont porté attention à mon post !!!
Sixool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 08h42   #19
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Pourquoi ne pas simplement ajouter ouvert et clos dans la CTE nommée T1 ?

Cela simplifierait grandement votre requête je pense.
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 13h54   #20
Invité de passage
 
Inscription : décembre 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 13
Points : 1
Points : 1
Quelque chose dans ce goût là ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
WITH T1(MOIS, OUVERTS, CLOS, DELTA) AS 
	(SELECT
		MONTH(PLANNINGS.D_JOUR) AS MOIS,
		COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = 'INC' AND OUVERTURES.I_APP_ENVIRONN = 'Production' AND OUVERTURES.C_EQUIPE <> 'HDBANQUE' THEN OUVERTURES.IDT_APPEL ELSE NULL END) AS OUVERTS, 
		COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = 'INC' AND CLOTURES.I_APP_ENVIRONN = 'Production' AND CLOTURES.C_EQUIPE <> 'HDBANQUE' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS CLOS,
		COUNT(DISTINCT CASE WHEN OUVERTURES.C_NATURE = 'INC' AND OUVERTURES.C_EQUIPE <> 'HDBANQUE' THEN OUVERTURES.IDT_APPEL ELSE NULL END) - COUNT(DISTINCT CASE WHEN CLOTURES.C_NATURE = 'INC' AND CLOTURES.I_APP_ENVIRONN = 'Production' AND CLOTURES.C_EQUIPE <> 'HDBANQUE' THEN CLOTURES.IDT_APPEL ELSE NULL END) AS DELTA
	FROM
		APPEL AS OUVERTURES RIGHT OUTER JOIN
		PLANNINGS ON CONVERT(char(10), OUVERTURES.D_APPEL, 103) = CONVERT(char(10), PLANNINGS.D_JOUR, 103) LEFT OUTER JOIN
		APPEL AS CLOTURES ON CONVERT(char(10), PLANNINGS.D_JOUR, 103) = CONVERT(char(10), CLOTURES.D_CLOTTECH, 103)
	WHERE
		YEAR(PLANNINGS.D_JOUR) = YEAR(CURRENT_TIMESTAMP)
	GROUP BY
		MONTH(PLANNINGS.D_JOUR)
	)
 
SELECT
	T2.MOIS,
	SUM(T1.OUVERTS) AS OUVERTS,
	SUM(T1.CLOS) AS CLOS,
	SUM(T2.STOCK) AS STOCK
FROM
	(SELECT
		MOIS,
		0 AS OUVERTS,
		0 AS CLOS,
		(SELECT
			SUM(DELTA) AS DELTA
		FROM
			T1
		WHERE
			MOIS <= a.MOIS
		) AS STOCK
	FROM T1 AS a
	GROUP BY MOIS
	) AS T2 INNER JOIN
 	T1 ON T2.MOIS = T1.MOIS
GROUP BY T2.MOIS
Sixool 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 01h15.


 
 
 
 
Partenaires

Hébergement Web