报表自动更新字段名称

JERRY_LIU 2013-07-22 05:12:42
因为要每个月出一个报表,内容大概是未来一年的订单数量,于是我将订单的数据提取出来,并且按打开报表当时的日期,自动提取年份,月份,提取往后12个月的数据,并按年加月生成字段名,这些都是用存储过程生成的,报表中的列标题就是字段名,每当换月时,水晶报表中的字段名就不匹配了,比如6月的第一个字段是2013_m6,最后一个字段是2014_m5,到七月时第一个字段就是2013_m7,最后一个字段就是2014_m6了。

一定要手动更新一次报表的字段名,很不方便,有方法能自动更新吗?
以下是生成字段名的一段SQL代码,供参考:

declare @y smallint,@m tinyint,@sql nvarchar(4000)
select @y = year(GETDATE()), @m = MONTH(getdate())
set @sql = 'select aa=min(aa), bb=min(bb), cc = min(cc)'

select top 12 @sql = @sql+','+quotename(ltrim(y)+'_'+name)+'=max(case order_y when '+ltrim(y)+' then '+name+' else 0 end)' from
(
select y=@y, m=colid-8, name from syscolumns where id = object_id('XXX') and colid between 9 and 20
union all
select y=@y+1,m=colid-8+12, name from syscolumns where id = object_id('XXX') and colid between 9 and 20
) t
where m >=@m

set @sql = @sql + ' from XXX where order_y in (' + case when @y < 8 then ltrim(@y) else ltrim(@y)+','+ltrim(@y+1) end+') group by aa,bb,cc'

exec (@sql)
...全文
537 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JERRY_LIU 2013-08-06
  • 打赏
  • 举报
回复
但是有一个问题,如果SQL服务器和客户端电脑的日期 不 相同时,会有时间上的误差,比如服务器是7月31号,而客户端是8月1 号。服务器按7月开始计算,客户端执行Crystal report时,取本地的8月,报表列标题就从8月开始显示,这就对不上了。
JERRY_LIU 2013-08-06
  • 打赏
  • 举报
回复
我打算换一个思路来解决,字段名就固定下来,比如m1,m2一直到m12. 另外在报表标题上写明从哪年哪年到哪年哪月。
JERRY_LIU 2013-07-30
  • 打赏
  • 举报
回复
有人能解决吗?

4,820

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧