我写了一个存储过程 xxx
参数是 年 开始月份 结束月份 开始科目 结束科目 开始部门 结束部门执行结果是:
部门 科目 比率 比如我EXEC XXX '2008','1','1','100','200','001','008'结果会出来
部门 科目 比率
A 车费 0.2
A 补贴 0.8
B 车费 0.5
B 补贴 0.7
... ...当然 我月份的参数变过 比如做2到2
就会查出2月份的比率现在我想另外写个存储过程 PPP
参数是 年 开始科目 结束科目 开始部门 结束部门
执行结果形同是:
部门 科目 一月 二月 三月 四月...十二月
A 车费 0.2 0.4 0.1 0.4 ...0.7
A 补贴 0.8 0.4 1.2 0.4 ...0.5
B 车费 0.5 0.4 0.1 0.5 ...0.7
B 补贴 0.7 0.2 0.3 0.4 ...0.8
... ... ... ...这个存储过程怎么写呢?
特别是月份连续做字段怎么写?
参数是 年 开始月份 结束月份 开始科目 结束科目 开始部门 结束部门执行结果是:
部门 科目 比率 比如我EXEC XXX '2008','1','1','100','200','001','008'结果会出来
部门 科目 比率
A 车费 0.2
A 补贴 0.8
B 车费 0.5
B 补贴 0.7
... ...当然 我月份的参数变过 比如做2到2
就会查出2月份的比率现在我想另外写个存储过程 PPP
参数是 年 开始科目 结束科目 开始部门 结束部门
执行结果形同是:
部门 科目 一月 二月 三月 四月...十二月
A 车费 0.2 0.4 0.1 0.4 ...0.7
A 补贴 0.8 0.4 1.2 0.4 ...0.5
B 车费 0.5 0.4 0.1 0.5 ...0.7
B 补贴 0.7 0.2 0.3 0.4 ...0.8
... ... ... ...这个存储过程怎么写呢?
特别是月份连续做字段怎么写?
数据表Mytable
WorkID Name SaleDate DayCount
001 张三 2008-01-01 3
002 李四 2008-01-10 5
001 张三 2008-01-20 1
003 老王 2008-01-20 2
001 张三 2008-04-01 6
002 李四 2008-04-02 7
004 小强 2008-04-03 8
要求按月输出明细:
2008-01明细:
WorkID Name 2008-01-01 2008-01-02 2008-01-03 2008-01-04 ...... 2008-01-31
001 张三 3 0 0 0 0
002 李四 0 0 0 0 0
003 老王 0 0 0 0 0
004 小强 0 0 0 0 0 答:创建存储过程,动态生成SQL即可create proc p_test @date varchar(10)
as
declare @sql varchar(8000)
declare @i int select @sql='select WorkID,Name',@i=1
while 1=1
begin
select @sql=@sql+',sum(case when convert(char(10),SaleDate,120)='''+(@date+'-'+right('00'+ltrim(@i),2))+''' then DayCount else 0 end) ['+(@date+'-'+right('00'+ltrim(@i),2))+']',
@i=@i+1
if @i>day(dateadd(day,-1,dateadd(month,1,@date+'-1'))) break
end
exec (@sql+' from tb group by WorkID,Name order by WorkID')
go
exec p_test '2008-04'
create proc p_test @date varchar(10)
as
declare @sql varchar(8000)
declare @i int select @sql='select 科目代码,科目名称,部门代码,部门',@i=1
while 1=1
begin
select @sql=@sql+',sum(case when convert(char(10),月份,120)='''+(@date+'-'+right('00'+ltrim(@i),2))+''' then 比率 else 0 end) ['+right('00'+ltrim(@i),2))+']',
@i=@i+1
if @i>month(dateadd(month,-1,dateadd(year,1,@date+'-1'))) break
end
exec (@sql+' from tb group by 科目代码,部门 order by 科目代码')
goexec p_test '2008'
但是问题是
我怎么样根据存储过程 xxx
参数是 年 开始月份 结束月份 开始科目 结束科目 开始部门 结束部门 执行结果是:
部门 科目 比率 比如我EXEC XXX '2008','1','1','100','200','001','008' 结果会出来
部门 科目 比率
A 车费 0.2
A 补贴 0.8
B 车费 0.5
B 补贴 0.7
... ... 当然 我月份的参数变过 比如做2到2
就会查出2月份的比率
那么我怎么样先得到以下这张表?
科目代码 科目 部门代码 部门 月份 比率
001 车费 01.01 A 2008-01 0.2
002 补贴 01.01 A 2008-02 0.6
... ... .... ....
insert into tt select '001', '车费', '01.01', 'A', '2008-01', '0.2'
insert into tt select '002', '补贴', '01.01', 'A', '2008-02', '0.6'
declare @sql varchar(1000),@year varchar(10)
set @year='2008'
set @sql='select 部门 '
select @sql=@sql+',max(case when right(月份,2)='''+right(月份,2)+''' then 比率 else null end) as ['+right(月份,2)+'月]'
from (select distinct 月份 from tt) as aa
set @sql=@sql+' from tt where left(月份,4)='+@year+' group by 部门 '
print @sql
exec(@sql)部门 01月 02月
---- ---------- ----------
A 0.2 0.6