求不能将存储过程做数据源的解决方法!
求解决方法:后台已可以用存储过程解决,但直接用该存储过程做数据源,创建数据窗口失败!
请教有没有解决方案,(注:下面的例子数据比较简单,用交叉表也能生成最后的报表,
实际数据比例子数据复杂,不能用交叉表生成结果,因而需要先在sql后台处理)
表结构如下:
销售表
销售日期 柜台号 金额
2004-10-10 aaa 20000
2004-10-10 bbb 35000
2004-10-10 ccc 40000
2004-10-11 aaa 38000
2004-10-11 bbb 46000
2004-10-11 ccc 50000
柜台表
编号 名称
aaa 食品柜
bbb 服装柜
ccc 家电柜
ddd 文化柜
... ......
用户输入柜台编号及销售起止日期构建成下面的表
如上输入柜台编号为aaa,bbb,ccc销售日期起止日期2004-10-10,2004-10-11
结果表如下:
销售日期 食品柜 服装柜 家电柜 合计金额
2004-10-10 20000 35000 40000 95000
2004-10-11 38000 46000 50000 134000
后台解决方法:
--用存储过程
--示例
--示例数据
create table 销售表(销售日期 datetime,柜台号 varchar(10),金额 int)
insert 销售表 select '2004-10-10','aaa',20000
union all select '2004-10-10','bbb',35000
union all select '2004-10-10','ccc',40000
union all select '2004-10-11','aaa',38000
union all select '2004-10-11','bbb',46000
union all select '2004-10-11','ccc',50000
create table 柜台表(编号 varchar(10),名称 varchar(10))
insert 柜台表 select 'aaa','食品柜'
union all select 'bbb','服装柜'
union all select 'ccc','家电柜'
union all select 'ddd','文化柜'
go
--查询的存储过程
create proc p_qry
@编号 varchar(8000),
@开始日期 datetime,
@结束日期 datetime
as
declare @s varchar(8000),@tj varchar(100)
select @s=''
,@tj=' where 销售日期 between '''
+convert(char(10),@开始日期,120)
+''' and '''
+convert(char(10),@结束日期,120)
+''''
select @s=@s+',['+名称+']=sum(case 柜台号 when '''+编号+''' then 金额 else 0 end)'
from 柜台表 where charindex(','+编号+',',','+@编号+',')>0
exec('
select 销售日期=convert(char(10),销售日期,120)'+@s+'
from 销售表 '+@tj+'
group by convert(char(10),销售日期,120)')
go
--调用
exec p_qry 'aaa,bbb,ccc','2004-10-10','2004-10-11'
go
--删除测试
drop table 销售表,柜台表
drop proc p_qry
/*--测试结果
销售日期 食品柜 服装柜 家电柜
---------- ----------- ----------- -----------
2004-10-10 20000 35000 40000
2004-10-11 38000 46000 50000
(所影响的行数为 2 行)
--*/