2010-03-15 4 views
0

J'ai le tableau suivant qui est essentiellement le résumé des transactions quotidiennes et est chargé tous les soirs.SQL dernier jour dans la mite sélectionnez

+++++++++++++++++++++++ 
+ DateCreated + Sale + 
+++++++++++++++++++++++ 
+ 20100101 + 1000 + 
+ 20100131 + 2000 + 
+ 20100210 + 2000 + 
+ 20100331 + 4000 + 
+++++++++++++++++++++++ 

Je dois afficher la vente par mois, mais seulement pour le dernier jour de chaque mois.

par exemple

JAN 2000 
FEB  0 
MAR 4000 

Je pourrais probablement accomplir ceci avec CASE dans ma sélection, mais est-ce efficace? C'est SQL Server 2000.

Répondre

0

J'ai eu une table de calendrier, juste ajouté une colonne "IsLastDayOfMonth", définissez le dernier jour de chaque mois. Puis rejoint cela à ma requête, en filtrant par "IsLastDayOfMonth" seulement et cela a fonctionné.

select a.datecreated,a.sale 
     from salesummary a 
inner join calendar c 
on a.datecreated = c.fulldatekey 
and c.IsLastDayOfMonth = 1 
group by a.datecreated,a.sale 
7

Mon Q & D solution à ceci a été de construire une date qui est le premier jour du mois suivant, puis soustraire un jour.

+0

WOW c'est une solution impressionnante! – Andrey

1

Vous pourriez faire quelque chose comme ça, mais il ne montrera pas 0 pour les données manquantes:

select YEAR(DateCreated) as Year, MONTH(DateCreated) as Month, Sale 
from MyTable 
where DAY(DateCreated + 1) = 1