2013-06-01 4 views
0

Мне нужно отображать все даты между двумя конкретными датами в sql server 2008? Таблица содержит поле, такое как дата, количество, поэтому, если я даю от даты = '01/06/2013 'и todate = '05/06/2013', мне нужно показать все даты между этими датами вместе с количество.даты между двумя конкретными датами

Выход, как следующее:

Date(date datatype)   Day   Produced Qty  

01-06-13   Saturday   400.00 
02-06-13   Sunday  550.00 
03-06-13   Monday  200.00 
04-06-13   Tuesday  100.00 
05-06-13   Wednsdy  250.00 

Total      1500.00 

Пожалуйста, помогите?

+0

Какой тип данных является вашим столбцом 'Date'? –

+1

Также, как нормализация БД, вы не должны хранить день недели. –

+0

Вы спрашиваете, как производить вывод для _every_ date в диапазоне, даже если таблица не содержит данных для некоторых дат? – HABO

ответ

5

Попробуйте использовать это ...

Select date, day, produce_qty from Table 
where date >= '03/06/2013' and date < '05/06/2013' 

Или

Select date, day, produce_qty from Table 
    where date BETWEEN '03/06/2013' and '05/06/2013' 
1

Это даст вам таблицу дат, которые вы можете OUTER JOIN с вашими данными:

declare @Start as Date = '20130501'; 
declare @End as Date = '20130515'; 

with Dates as (
    select @Start as [ReportDate] 
    union all 
    select DateAdd(day, 1, ReportDate) 
    from Dates 
    where ReportDate < @End) 
    select ReportDate 
    from Dates option (MaxRecursion 0); 

EDIT: Или, с данными образца:

declare @Production as Table (ActivityDate Date, ProductionQuantity Int); 
insert into @Production (ActivityDate, ProductionQuantity) values 
    ('20130106', 400), 
    ('20130112', 550), 
    ('20130112', 50); 

declare @Start as Date = '20130101'; 
declare @End as Date = '20130115'; 

with Dates as (
    select @Start as [ReportDate] 
    union all 
    select DateAdd(day, 1, ReportDate) 
    from Dates 
    where ReportDate < @End) 
    select ReportDate, Coalesce(Sum(P.ProductionQuantity), 0) as Qty 
    from Dates as D left outer join 
     @Production as P on P.ActivityDate = D.ReportDate 
     group by D.ReportDate 
     option (MaxRecursion 0); 
Смежные вопросы