Sql根据起止日期生成时间列表

 1 --monList  monList  monList
 2 --根据起止时间生成月份列表
 3 DECLARE  
 4 @BeginMonth varchar(6),  
 5 @EndMonth varchar(6) 
 6 SELECT
 7 @BeginMonth='201409',  
 8 @EndMonth='201506'SELECT  
 9 CONVERT(VARCHAR(6),DATEADD(month,number,@BeginMonth+'01'),112) as monList
10 FROM  
11 master..spt_values  
12 WHERE  
13 type='P'  
14 and  
15 DATEADD(month,number,@BeginMonth+'01')<=@EndMonth+'01'
16 
17 --dayList  dayList  dayList
18 --根据起止时间生成天列表
19 DECLARE @BeginDay DATE,@EndDay DATE
20 SELECT @BeginDay='2016-12-31',@EndDay='2017-10-31'--GetDate()
21 SELECT DateAdd(day,number,@BeginDay) as dayList 
22   FROM master..spt_values  
23  WHERE type = 'p'  
24    AND number <= DateDiff(day,@BeginDay,@EndDay) 
25    
26 
27 
28 declare @sql varchar(8000)
29 set @sql = 'select Date'
30 select @sql = @sql + ',isnull (sum(case item when '''+item+''' then saleqty end),0) as ['+item+']' from (select distinct item from test where item is not null) as a
31 select @sql = @sql+' from test group by date'
32 exec(@sql)