日期:2014-05-19  浏览次数:20568 次

新!!!紧急求助!这样的存储过程如何编制!!
table1
--------------------------------------
_date   e_name  
09-03   A
09-03   B
09-03   C
09-04   A
09-04   B
09-04   D
09-04   E
09-05   B
09-05   E
09-06   A
09-06   D
09-06   E
09-07   B
09-07   E
-------------------------------------
table2
_date   A   B   C   D   E
09-04   1   1   0   1   1  
09-05   0   1   0   0   1  
09-06   1   0   0   1   1
0代表‘没有’,1代表‘有’
--------------------------------
上一次提问,在e_name取值不确定时,在table1的基础上统计成table2样式,所用动态的sql语句

(paoluo(一天到晚游泳的鱼)   )给出的。如下:
Declare   @S   Varchar(8000)
Select   @S   =   'Select   _date '
Select   @S   =   @S   +   ',   Max(Case   e_name   When   ' ' '   +   e_name   +   ' ' '   Then   1   Else   0   End)   As   '   +   e_name
From   table1   Group   By   e_name
Select   @S   =   @S   +   '   From   table1   Group   By   _date '
EXEC(@S)

可是实现
------------------
现在的问题:
我想通过两个变量@d_b,@d_e,来向以上sql语句传递统计的起止时间,如@d_b=09-04,@d_e=09-06,又应该怎么编程???



------解决方案--------------------
--不好意思,刚才错了
--创建测试环境
create table table1(_date varchar(10),e_name varchar(10))
create table table2(_date varchar(10), A int, B int,C int,D int,E int)

--插入测试数据
insert table1(_date,e_name)
select '09-03 ', 'A ' union all
select '09-03 ', 'B ' union all
select '09-03 ', 'C ' union all
select '09-04 ', 'A ' union all
select '09-04 ', 'B ' union all
select '09-04 ', 'D ' union all
select '09-04 ', 'E ' union all
select '09-05 ', 'B ' union all
select '09-05 ', 'E ' union all
select '09-06 ', 'A ' union all
select '09-06 ', 'D ' union all
select '09-06 ', 'E ' union all
select '09-07 ', 'B ' union all
select '09-07 ', 'E '
insert table2(_date,A,B,C,D,E)
select '09-04 ', '1 ', '1 ', '0 ', '1 ', '1 ' union all
select '09-05 ', '0 ', '1 ', '0 ', '0 ', '1 ' union all
select '09-06 ', '1 ', '0 ', '0 ', '1 ', '1 '

--求解过程
Declare @S Varchar(8000),@d_b varchar(20),@d_e varchar(20)
Select @S = 'Select _date ',@d_b = '09-04 ',@d_e = '09-06 '
Select @S = @S + ', Max(Case e_name When ' ' ' + e_name + ' ' ' Then 1 Else 0 End) As ' + e_name
From table1 Group By e_name
Select @S = @S + ' From table1 where _date between ' ' '+@d_b + ' ' ' and ' ' ' + @d_e+ ' ' ' Group By _date '

exec (@S)

--删除测试环境
drop table table1,table2

/*--测试结果
_date A B C D E
---------- ----------- ----------- ----------- ----------- -----------
09-04 1 1 0 1 1
09-0