Requete T-SQL pour compléter des données manquantes
4 réponses
Kerad
Bonjour,
Je cherche à alimenter un graphe Reporting Services.
Les données en abscisse sont une date, et les données en ordonnées des
entiers.
Ma requete retourne
Select jour, count(*) as nombreEntrees
From entrees
GROUP BY jour
j'aurais donc des données retournées de ce style
01/03/2006 5
03/03/2006 8
07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une
representation de la forme:
01/03/2006 5
02/03/2006 0
03/03/2006 8
04/03/2006 0
05/03/2006 0
06/03/2006 0
07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date
minimum et la date maximum, sans qu'elles existent dans la table.
Commetn faire ceci, je me disais que peut être en passant par une table
temporaire, mais je ne sais pas générer son contenu.
-- Récupère la date du jour et enlève la composante heure SET @datedepart = CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 112), 112)
SET @datedepart = DATEADD(month, -1, @datedepart ) SET @datearrivee = DATEADD(month, 2, @datedepart )
WHILE (@datedepart < @datearrivee) BEGIN
INSERT INTO mesdates VALUES( @datedepart) SET @datedepart = DATEADD(day, 1, @datedepart )
END
Ce qui génère les dates d'un mois avant et après la date du jour
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD
"Kerad" a écrit :
Bonjour,
Je cherche à alimenter un graphe Reporting Services. Les données en abscisse sont une date, et les données en ordonnées des entiers.
Ma requete retourne Select jour, count(*) as nombreEntrees From entrees GROUP BY jour
j'aurais donc des données retournées de ce style 01/03/2006 5 03/03/2006 8 07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une representation de la forme: 01/03/2006 5 02/03/2006 0 03/03/2006 8 04/03/2006 0 05/03/2006 0 06/03/2006 0 07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date minimum et la date maximum, sans qu'elles existent dans la table. Commetn faire ceci, je me disais que peut être en passant par une table temporaire, mais je ne sais pas générer son contenu.
Merci de votre aide
Solution avoir une table de contenant les dates, au pire une table
temporaire...
SELECT jour, count(*) as nombreEntrees
FROM #mesdates AS dte
LEFT JOIN entrees AS ent ON dte.jour = ent.jour
GROUP BY jour
-- Récupère la date du jour et enlève la composante heure
SET @datedepart = CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 112), 112)
SET @datedepart = DATEADD(month, -1, @datedepart )
SET @datearrivee = DATEADD(month, 2, @datedepart )
WHILE (@datedepart < @datearrivee)
BEGIN
INSERT INTO mesdates VALUES( @datedepart)
SET @datedepart = DATEADD(day, 1, @datedepart )
END
Ce qui génère les dates d'un mois avant et après la date du jour
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
"Kerad" a écrit :
Bonjour,
Je cherche à alimenter un graphe Reporting Services.
Les données en abscisse sont une date, et les données en ordonnées des
entiers.
Ma requete retourne
Select jour, count(*) as nombreEntrees
From entrees
GROUP BY jour
j'aurais donc des données retournées de ce style
01/03/2006 5
03/03/2006 8
07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une
representation de la forme:
01/03/2006 5
02/03/2006 0
03/03/2006 8
04/03/2006 0
05/03/2006 0
06/03/2006 0
07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date
minimum et la date maximum, sans qu'elles existent dans la table.
Commetn faire ceci, je me disais que peut être en passant par une table
temporaire, mais je ne sais pas générer son contenu.
-- Récupère la date du jour et enlève la composante heure SET @datedepart = CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 112), 112)
SET @datedepart = DATEADD(month, -1, @datedepart ) SET @datearrivee = DATEADD(month, 2, @datedepart )
WHILE (@datedepart < @datearrivee) BEGIN
INSERT INTO mesdates VALUES( @datedepart) SET @datedepart = DATEADD(day, 1, @datedepart )
END
Ce qui génère les dates d'un mois avant et après la date du jour
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD
"Kerad" a écrit :
Bonjour,
Je cherche à alimenter un graphe Reporting Services. Les données en abscisse sont une date, et les données en ordonnées des entiers.
Ma requete retourne Select jour, count(*) as nombreEntrees From entrees GROUP BY jour
j'aurais donc des données retournées de ce style 01/03/2006 5 03/03/2006 8 07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une representation de la forme: 01/03/2006 5 02/03/2006 0 03/03/2006 8 04/03/2006 0 05/03/2006 0 06/03/2006 0 07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date minimum et la date maximum, sans qu'elles existent dans la table. Commetn faire ceci, je me disais que peut être en passant par une table temporaire, mais je ne sais pas générer son contenu.
Merci de votre aide
Kerad
Merci beaucoup.
"Christian Robert" a écrit :
Solution avoir une table de contenant les dates, au pire une table temporaire...
SELECT jour, count(*) as nombreEntrees FROM #mesdates AS dte LEFT JOIN entrees AS ent ON dte.jour = ent.jour GROUP BY jour
-- Récupère la date du jour et enlève la composante heure SET @datedepart = CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 112), 112)
SET @datedepart = DATEADD(month, -1, @datedepart ) SET @datearrivee = DATEADD(month, 2, @datedepart )
WHILE (@datedepart < @datearrivee) BEGIN
INSERT INTO mesdates VALUES( @datedepart) SET @datedepart = DATEADD(day, 1, @datedepart )
END
Ce qui génère les dates d'un mois avant et après la date du jour
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD
"Kerad" a écrit :
> Bonjour, > > Je cherche à alimenter un graphe Reporting Services. > Les données en abscisse sont une date, et les données en ordonnées des > entiers. > > Ma requete retourne > Select jour, count(*) as nombreEntrees > From entrees > GROUP BY jour > > j'aurais donc des données retournées de ce style > 01/03/2006 5 > 03/03/2006 8 > 07/03/2006 9 > > Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une > representation de la forme: > 01/03/2006 5 > 02/03/2006 0 > 03/03/2006 8 > 04/03/2006 0 > 05/03/2006 0 > 06/03/2006 0 > 07/03/2006 9 > > je voudrais donc que ma vue me retourne les dates manquantes entre la date > minimum et la date maximum, sans qu'elles existent dans la table. > Commetn faire ceci, je me disais que peut être en passant par une table > temporaire, mais je ne sais pas générer son contenu. > > Merci de votre aide
Merci beaucoup.
"Christian Robert" a écrit :
Solution avoir une table de contenant les dates, au pire une table
temporaire...
SELECT jour, count(*) as nombreEntrees
FROM #mesdates AS dte
LEFT JOIN entrees AS ent ON dte.jour = ent.jour
GROUP BY jour
-- Récupère la date du jour et enlève la composante heure
SET @datedepart = CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 112), 112)
SET @datedepart = DATEADD(month, -1, @datedepart )
SET @datearrivee = DATEADD(month, 2, @datedepart )
WHILE (@datedepart < @datearrivee)
BEGIN
INSERT INTO mesdates VALUES( @datedepart)
SET @datedepart = DATEADD(day, 1, @datedepart )
END
Ce qui génère les dates d'un mois avant et après la date du jour
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
"Kerad" a écrit :
> Bonjour,
>
> Je cherche à alimenter un graphe Reporting Services.
> Les données en abscisse sont une date, et les données en ordonnées des
> entiers.
>
> Ma requete retourne
> Select jour, count(*) as nombreEntrees
> From entrees
> GROUP BY jour
>
> j'aurais donc des données retournées de ce style
> 01/03/2006 5
> 03/03/2006 8
> 07/03/2006 9
>
> Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une
> representation de la forme:
> 01/03/2006 5
> 02/03/2006 0
> 03/03/2006 8
> 04/03/2006 0
> 05/03/2006 0
> 06/03/2006 0
> 07/03/2006 9
>
> je voudrais donc que ma vue me retourne les dates manquantes entre la date
> minimum et la date maximum, sans qu'elles existent dans la table.
> Commetn faire ceci, je me disais que peut être en passant par une table
> temporaire, mais je ne sais pas générer son contenu.
>
> Merci de votre aide
-- Récupère la date du jour et enlève la composante heure SET @datedepart = CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 112), 112)
SET @datedepart = DATEADD(month, -1, @datedepart ) SET @datearrivee = DATEADD(month, 2, @datedepart )
WHILE (@datedepart < @datearrivee) BEGIN
INSERT INTO mesdates VALUES( @datedepart) SET @datedepart = DATEADD(day, 1, @datedepart )
END
Ce qui génère les dates d'un mois avant et après la date du jour
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD
"Kerad" a écrit :
> Bonjour, > > Je cherche à alimenter un graphe Reporting Services. > Les données en abscisse sont une date, et les données en ordonnées des > entiers. > > Ma requete retourne > Select jour, count(*) as nombreEntrees > From entrees > GROUP BY jour > > j'aurais donc des données retournées de ce style > 01/03/2006 5 > 03/03/2006 8 > 07/03/2006 9 > > Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une > representation de la forme: > 01/03/2006 5 > 02/03/2006 0 > 03/03/2006 8 > 04/03/2006 0 > 05/03/2006 0 > 06/03/2006 0 > 07/03/2006 9 > > je voudrais donc que ma vue me retourne les dates manquantes entre la date > minimum et la date maximum, sans qu'elles existent dans la table. > Commetn faire ceci, je me disais que peut être en passant par une table > temporaire, mais je ne sais pas générer son contenu. > > Merci de votre aide
SQLpro [MVP]
Kerad a écrit :
Bonjour,
Je cherche à alimenter un graphe Reporting Services. Les données en abscisse sont une date, et les données en ordonnées des entiers.
Ma requete retourne Select jour, count(*) as nombreEntrees From entrees GROUP BY jour
j'aurais donc des données retournées de ce style 01/03/2006 5 03/03/2006 8 07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une representation de la forme: 01/03/2006 5 02/03/2006 0 03/03/2006 8 04/03/2006 0 05/03/2006 0 06/03/2006 0 07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date minimum et la date maximum, sans qu'elles existent dans la table. Commetn faire ceci, je me disais que peut être en passant par une table temporaire, mais je ne sais pas générer son contenu.
SQL ne saurait inventer des données. Vous DEVEZ implanter une table des dates dans ce cas. Votre modèle est en défaut. Après vous n'aurez qu'à faire une jointure RIGHT OUTER JOIN avec cette table de date et le tour sera joué
Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/
A +
Merci de votre aide
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Kerad a écrit :
Bonjour,
Je cherche à alimenter un graphe Reporting Services.
Les données en abscisse sont une date, et les données en ordonnées des
entiers.
Ma requete retourne
Select jour, count(*) as nombreEntrees
From entrees
GROUP BY jour
j'aurais donc des données retournées de ce style
01/03/2006 5
03/03/2006 8
07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une
representation de la forme:
01/03/2006 5
02/03/2006 0
03/03/2006 8
04/03/2006 0
05/03/2006 0
06/03/2006 0
07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date
minimum et la date maximum, sans qu'elles existent dans la table.
Commetn faire ceci, je me disais que peut être en passant par une table
temporaire, mais je ne sais pas générer son contenu.
SQL ne saurait inventer des données. Vous DEVEZ implanter une table des
dates dans ce cas. Votre modèle est en défaut.
Après vous n'aurez qu'à faire une jointure RIGHT OUTER JOIN avec cette
table de date et le tour sera joué
Lisez l'article que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/gestiontemps/
A +
Merci de votre aide
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Je cherche à alimenter un graphe Reporting Services. Les données en abscisse sont une date, et les données en ordonnées des entiers.
Ma requete retourne Select jour, count(*) as nombreEntrees From entrees GROUP BY jour
j'aurais donc des données retournées de ce style 01/03/2006 5 03/03/2006 8 07/03/2006 9
Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une representation de la forme: 01/03/2006 5 02/03/2006 0 03/03/2006 8 04/03/2006 0 05/03/2006 0 06/03/2006 0 07/03/2006 9
je voudrais donc que ma vue me retourne les dates manquantes entre la date minimum et la date maximum, sans qu'elles existent dans la table. Commetn faire ceci, je me disais que peut être en passant par une table temporaire, mais je ne sais pas générer son contenu.
SQL ne saurait inventer des données. Vous DEVEZ implanter une table des dates dans ce cas. Votre modèle est en défaut. Après vous n'aurez qu'à faire une jointure RIGHT OUTER JOIN avec cette table de date et le tour sera joué
Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/
A +
Merci de votre aide
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Kerad
malheureusement ce n'est pas mon modèle mais celui d'un produit de Microsoft ;) le problème se repète aussi dans le cas d'entiers à la place des dates... La solution de la table intermédiaire dans la vue y répond
"SQLpro [MVP]" a écrit :
Kerad a écrit : > Bonjour, > > Je cherche à alimenter un graphe Reporting Services. > Les données en abscisse sont une date, et les données en ordonnées des > entiers. > > Ma requete retourne > Select jour, count(*) as nombreEntrees > From entrees > GROUP BY jour > > j'aurais donc des données retournées de ce style > 01/03/2006 5 > 03/03/2006 8 > 07/03/2006 9 > > Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une > representation de la forme: > 01/03/2006 5 > 02/03/2006 0 > 03/03/2006 8 > 04/03/2006 0 > 05/03/2006 0 > 06/03/2006 0 > 07/03/2006 9 > > je voudrais donc que ma vue me retourne les dates manquantes entre la date > minimum et la date maximum, sans qu'elles existent dans la table. > Commetn faire ceci, je me disais que peut être en passant par une table > temporaire, mais je ne sais pas générer son contenu.
SQL ne saurait inventer des données. Vous DEVEZ implanter une table des dates dans ce cas. Votre modèle est en défaut. Après vous n'aurez qu'à faire une jointure RIGHT OUTER JOIN avec cette table de date et le tour sera joué
Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/
A +
> > Merci de votre aide
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
malheureusement ce n'est pas mon modèle mais celui d'un produit de Microsoft ;)
le problème se repète aussi dans le cas d'entiers à la place des dates...
La solution de la table intermédiaire dans la vue y répond
"SQLpro [MVP]" a écrit :
Kerad a écrit :
> Bonjour,
>
> Je cherche à alimenter un graphe Reporting Services.
> Les données en abscisse sont une date, et les données en ordonnées des
> entiers.
>
> Ma requete retourne
> Select jour, count(*) as nombreEntrees
> From entrees
> GROUP BY jour
>
> j'aurais donc des données retournées de ce style
> 01/03/2006 5
> 03/03/2006 8
> 07/03/2006 9
>
> Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une
> representation de la forme:
> 01/03/2006 5
> 02/03/2006 0
> 03/03/2006 8
> 04/03/2006 0
> 05/03/2006 0
> 06/03/2006 0
> 07/03/2006 9
>
> je voudrais donc que ma vue me retourne les dates manquantes entre la date
> minimum et la date maximum, sans qu'elles existent dans la table.
> Commetn faire ceci, je me disais que peut être en passant par une table
> temporaire, mais je ne sais pas générer son contenu.
SQL ne saurait inventer des données. Vous DEVEZ implanter une table des
dates dans ce cas. Votre modèle est en défaut.
Après vous n'aurez qu'à faire une jointure RIGHT OUTER JOIN avec cette
table de date et le tour sera joué
Lisez l'article que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/gestiontemps/
A +
>
> Merci de votre aide
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
malheureusement ce n'est pas mon modèle mais celui d'un produit de Microsoft ;) le problème se repète aussi dans le cas d'entiers à la place des dates... La solution de la table intermédiaire dans la vue y répond
"SQLpro [MVP]" a écrit :
Kerad a écrit : > Bonjour, > > Je cherche à alimenter un graphe Reporting Services. > Les données en abscisse sont une date, et les données en ordonnées des > entiers. > > Ma requete retourne > Select jour, count(*) as nombreEntrees > From entrees > GROUP BY jour > > j'aurais donc des données retournées de ce style > 01/03/2006 5 > 03/03/2006 8 > 07/03/2006 9 > > Il n'y a pas d'entrée chaque jour, et je voudrais sur le graphe avoir une > representation de la forme: > 01/03/2006 5 > 02/03/2006 0 > 03/03/2006 8 > 04/03/2006 0 > 05/03/2006 0 > 06/03/2006 0 > 07/03/2006 9 > > je voudrais donc que ma vue me retourne les dates manquantes entre la date > minimum et la date maximum, sans qu'elles existent dans la table. > Commetn faire ceci, je me disais que peut être en passant par une table > temporaire, mais je ne sais pas générer son contenu.
SQL ne saurait inventer des données. Vous DEVEZ implanter une table des dates dans ce cas. Votre modèle est en défaut. Après vous n'aurez qu'à faire une jointure RIGHT OUTER JOIN avec cette table de date et le tour sera joué
Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/gestiontemps/
A +
> > Merci de votre aide
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************