Bonjour,
C'est dommage, vous auriez pu utiliser SQL Server Reporting Services qui est livré avec SQL Server dans les éditions Standard et Enterprise ...
C'est normal, puisque votre ensemble est vide
Si on calcule la date du premier jour de la semaine et qu'on met zéro pour la somme, ça vous convient ?
Soit alors la table suivante :
1 2 3 4 5
| CREATE TABLE test
(
une_date datetime
, une_valeur int
) |
Que nous peuplons avec :
1 2
| INSERT dbo.test
SELECT CAST('20110328' AS datetime), 12 |
Si nous exécutons :
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT une_date
, SUM(valeur_totale) AS valeur_totale
FROM (
SELECT une_date
, SUM(une_valeur) AS valeur_totale
FROM dbo.Test
GROUP BY une_date
UNION ALL
SELECT DATEADD(week, DATEDIFF(week, CAST(0 AS datetime), GETDATE()), CAST(0 AS datetime))
, 0
) AS T
GROUP BY une_date |
Nous obtenons 2011-03-28 00:00:00.000 12
Maintenant, purgeons la table avec :
Et réexécutons la requête : on obtient alors : 2011-03-28 00:00:00.000 0
Jusqu'au WHERE ça va, mais ensuite c'est une catastrophe, parce que vos filtres ne sont pas cherchables : SQL Server maintient bien des statistiques sur la colonne date (avec un peu de chance vous l'avez probablement indexée), mais pas sur le mois des valeurs de cette colonne, ni sur l'année, ni sur le jour ...
Pour faire ça proprement, vous pouvez donc écrire :
1 2 3 4 5 6
| SELECT date
, SUM(CAST(Valeur AS float)/1000) AS NUM
FROM BASE.dbo.WIK_QteHebdo
WHERE date > CAST(CAST(@tkan AS varchar(4)) + CAST(@tkmois AS varchar(2)) + CAST(@tkjour AS varchar(2)) AS datetime)
GROUP BY date
FOR XML AUTO, ELEMENTS, ROOT ('NUM') |
Je vous laisse écrire la bonne requête
@++
Partager