动态列的有关问题

动态列的问题
一个统计报表,用户输出一个日期段如'2014-01'到'2014-06'
则表格式如下
部门, 2014-01,2014-02,2014-03,2014-04,2014-05,2014-06
这个功能怎么实现 
------解决方案--------------------
declare @sql varchar(max),@startdate datetime,@enddate datetime 
set @startdate='2009-09-28'
set @enddate='2009-10-5'
set @sql='select '
select @sql=@sql+','''+convert(varchar(10),dateadd(day,number,@startdate),120)+''''
from master..spt_values where type='P' and number<=datediff(dd,@startdate,@enddate)
select @sql=stuff(@sql,8,1,' ')
exec(@sql)
/*---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
2009-09-28 2009-09-29 2009-09-30 2009-10-01 2009-10-02 2009-10-03 2009-10-04 2009-10-05

(1 行受影响)*/


参考 你的只需要截取前六位
------解决方案--------------------
DECLARE @StartDate CHAR(7)='2014-01'
DECLARE @EndDate CHAR(7) ='2014-06'
DECLARE @Dates DATETIME = CAST(@StartDate+'-01'AS DATETIME)
DECLARE @CreateTableSql NVARCHAR(4000)

IF OBJECT_ID('tempdb..#Test','U') IS NOT NULL DROP TAbLE #Test
CREATE TABLE #Test
(
DpartID INT
)

WHILE @Dates<=CAST(@EndDate+'-01'AS DATETIME)
BEGIN
PRINT CONVERT(CHAR(7),@Dates,120)
SET @CreateTableSql = N'ALTER TABLE #Test ADD ['+CONVERT(CHAR(7),@Dates,120)+'] VARCHAR(200) NULL'
EXEC (@CreateTableSql)
SET @Dates=DATEADD(MONTH,1,@Dates)
END

SELECT * FROM #Test

------解决方案--------------------

create table dept(name varchar(10))
insert into dept
select 'dept1' union all
select 'dept2' union all
select 'dept3' union all
select 'dept4' 

create table date_time(time varchar(10))
insert into  date_time 
select '2014-01' union all
select '2014-02' union all
select '2014-03' union all
select '2014-04' union all
select '2014-05' union all
select '2014-06'

select name,(select STUFF((select ','+time from date_time for xml path('')),1,1,''))
from dept
group by name

----------
dept1 2014-01,2014-02,2014-03,2014-04,2014-05,2014-06
dept2 2014-01,2014-02,2014-03,2014-04,2014-05,2014-06
dept3 2014-01,2014-02,2014-03,2014-04,2014-05,2014-06
dept4 2014-01,2014-02,2014-03,2014-04,2014-05,2014-06



不知道是不是这个意思