日期:2014-05-17  浏览次数:20519 次

跪求大神赐一个sql语句···
求一句sql语句···
我要查询从一个开始日期到结束日期的每一天的值····
例如 表结构:
      name       date           num
      小明    2013-03-01         2
      小明    2013-03-03         3
      小明    2013-03-05         5


那我如果要查询从3月1号到5号的结果···
要求返回
 name    2013-03-01    2013-03-02    2013-03-03  2013-03-04   2013-03-05
 小明      2               0            3            0             5


注意看···2013-03-02···在数据库里没有这个值··就赋值为0··
sql 数据库

------解决方案--------------------
declare @sql nvarchar(max),
@stime datetime,
@etime datetime
select @stime=min(date),@etime=max(date)from tb
select @sql=isnull(@sql,'')+',max(case when date='''+convert(varchar(10),dateadd(day,number,@stime),23)+''' then num else 0 end)['+convert(varchar(10),dateadd(day,number,@stime),23)+']' from master..spt_values where type='p' and 
convert(varchar(10),dateadd(day,number,@stime),23)<=convert(varchar(10),@etime,23)
exec('select [name]'+@sql+' from tb group by [name]')

------解决方案--------------------
引用:
引用:三楼的貌似可以,弄个动态饿行列转化,弄两个开始结束参数
我还有点不明白··问题在5楼··你看看是怎么回事··

 master..spt_values中有一列number你可以获取连续的数字,1,2,3,4,5.。。具体的就看你的需求了,你输入开始结束日期,中间的自动加1嘛,number的数字就在这两者之间