起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: qiezi

存储过程数据集**

[复制链接]
发表于 2008-3-7 18:33:11 | 显示全部楼层
请楼主铁出来你的存储过程看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-7 18:39:46 | 显示全部楼层
CREATE PROCEDURE dbo.proc_dept_report
@com_id char(4),@parentdept_id char(6),@adt_year int,@adt_month int,@plan_flag char(1),@lj_flag char(1)  AS

declare @bq_st datetime,@bq_ed datetime,@bn_st datetime,@bj_st datetime   /*当天起止时间及本月起时间*/
declare @tq_st datetime,@tq_ed datetime,@tn_st datetime,@tj_st datetime     /*同期起止时间*/
declare @ai_year int,@ai_month int, @ai_month_st int  
declare @ls_err1 nvarchar(4000),@ls_sql nvarchar(8000),@ls_sql1 nvarchar(4000),@ls_sql2 nvarchar(4000),@ls_sql3 nvarchar(4000)
declare @adt_month_st int,@adt_month_ed int,@li_rc int
/*计算当前月所在季度的*/
select @adt_month_st=(CASE  when @adt_month between  1 and 3 THEN 1  when @adt_month between 4 and 6 THEN 4  when @adt_month between 7 and 9 THEN 7 when @adt_month between 10 and 12 THEN 10 end)
select @adt_month_ed=(CASE  when @adt_month between  1 and 3 THEN 3  when @adt_month between 4 and 6 THEN 6  when @adt_month between 7 and 9 THEN 9 when @adt_month between 10 and 12 THEN 12 end)

SELECT @bn_st=min(date_begin),@bq_ed= max(date_end)  FROM ctlm16  WHERE ( com_id = @com_id ) AND ( fiscal_year = @adt_year ) AND  ( fiscal_period between 1 and @adt_month)
SELECT @bq_st=date_begin FROM ctlm16 WHERE ( com_id = @com_id ) AND ( fiscal_year = @adt_year ) AND ( fiscal_period = @adt_month)
SELECT @bj_st=date_begin FROM ctlm16 WHERE ( com_id = @com_id ) AND ( fiscal_year = @adt_year ) AND ( fiscal_period = @adt_month_st)
SELECT @tn_st=min(date_begin),@tq_ed= max(date_end) FROM ctlm16 WHERE ( com_id = @com_id ) AND ( fiscal_year = @adt_year -1 ) AND ( fiscal_period between 1 and @adt_month)
sELECT @tq_st=date_begin FROM ctlm16 WHERE ( com_id = @com_id ) AND ( fiscal_year = @adt_year -1) AND ( fiscal_period = @adt_month)
SELECT @tj_st=date_begin FROM ctlm16 WHERE ( com_id = @com_id ) AND ( fiscal_year = @adt_year -1) AND ( fiscal_period = @adt_month_st)

/*本期计划*/
if @plan_flag='Y' and @adt_month>1   /*如果滚动计划,取上月累计未完成*/
begin
    set @ai_month=1       
    while (@ai_month < @adt_month)
        begin
          set @ls_sql1 =@ls_sql1+'sat50.qty'+convert(varchar(2),@ai_month)+'-'+'sat50.qty_done'+convert(varchar(2),@ai_month)+'+'
          set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'-'+'sat50.amt_done'+convert(varchar(2),@ai_month)+'+'
          set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'-'+'sat50.ret_amt_done'+convert(varchar(2),@ai_month)+'+'
          set @ai_month=@ai_month+1
        end
end
set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@adt_month)+'+0 as bq_plan_qty,'
set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@adt_month)+'+0 as bq_plan_amt,'
set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@adt_month)+'+0 as bq_plan_return_amt,'

if @adt_month>6 and @lj_flag='Y'
   set @ai_month_st = 7
else
   set @ai_month_st = 1       

set @ai_month = @ai_month_st
while (@ai_month <= @adt_month)   /*本年累计*/
   begin
      if @ai_month <> @ai_month_st
         begin               
           set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'+'
           set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'+'
           set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'+'
         end       
      else
         begin
           set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'+0 as bn_plan_qty,'
           set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'+0 as bn_plan_amt,'
           set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'+0 as bn_plan_return_amt,'
         end
      set @ai_month =  @ai_month+1
   end
if @plan_flag='Y' and @adt_month_st>1    /*如果滚动计划,取上季度累计未完成,***紧接着要加上下边的本季计划*/
   begin   
     set @ai_month=1  
     while (@ai_month < @adt_month_st )
        begin
           set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'-'+'sat50.qty_done'+convert(varchar(2),@ai_month)+'+'
           set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'-'+'sat50.amt_done'+convert(varchar(2),@ai_month)+'+'
           set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'-'+'sat50.ret_amt_done'+convert(varchar(2),@ai_month)+'+'       
           set  @ai_month=@ai_month+1
        end
   end
set @ai_month = @adt_month_st
while (@ai_month <= @adt_month_ed)  /*本季计划*/
   begin       
     if @ai_month <> @adt_month_ed
        begin
          set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'+'
          set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'+'
          set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'+'
        end       
     else
        begin
          set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'+0 as bj_plan_qty,'
          set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'+0 as bj_plan_amt,'
          set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'+0 as bj_plan_return_amt,'
        end
     set @ai_month =  @ai_month +1       
   end
set @ai_month = 1
while (@ai_month <= 12)   /*本年度*/
   begin       
     if @ai_month <> 12
        begin       
          set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'+'
          set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'+'
          set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'+'
        end       
     else
        begin
          set @ls_sql1 =@ls_sql1 +'sat50.qty'+convert(varchar(2),@ai_month)+'+0 as nd_plan_qty,'
          set @ls_sql2 =@ls_sql2 +'sat50.amt'+convert(varchar(2),@ai_month)+'+0 as nd_plan_amt,'
          set @ls_sql3 =@ls_sql3 +'sat50.return_amt'+convert(varchar(2),@ai_month)+'+0 as nd_plan_return_amt '
        end
     set @ai_month = @ai_month+1
   end
set @ls_sql1 ='select category_no=sat50.category_no,parentdept_id=ctlm08.parentdept_id,dept_id=sat50.dept_id,'+@ls_sql1+@ls_sql2+@ls_sql3+',bq_real_qty=0.00,bn_real_qty=0.00,bj_real_qty=0.00,bq_real_amt=0.00,bn_real_amt=0.00,bj_real_amt=0.00,bq_real_return_amt=0.00,bn_real_return_amt=0.00,bj_real_return_amt=0.00,tq_real_qty=0.00,tn_real_qty=0.00,tj_real_qty=0.00,tq_real_amt=0.00,tn_real_amt=0.00,tj_real_amt=0.00,tq_real_return_amt=0.00,tn_real_return_amt=0.00,tj_real_return_amt=0.00 from sat50,ctlm08 where sat50.com_id =@com_id and sat50.year=@adt_year and ctlm08.com_id=sat50.com_id and ctlm08.dept_id = sat50.dept_id and ctlm08.parentdept_id= @parentdept_id'

/*计算完成*/
/*产品类 计算销售完成 以开单为准 发出*/
set @ls_sql2 ='select category_no=sat49.category_no,parentdept_id=ctlm08.parentdept_id,dept_id=sam20_a.dept_id,bq_plan_qty=0.00,bn_plan_qty=0.00,bj_plan_qty=0.00,nd_plan_qty=0.00,bq_plan_amt=0.00,bn_plan_amt=0.00,bj_plan_amt=0.00,nd_plan_amt=0.00,bq_plan_return_amt=0.00,bn_plan_return_amt=0.00,bj_plan_return_amt=0.00,nd_plan_return_amt=0.00,bq_real_qty=round(sum(CASE when sat04.date_of_fill between @bq_st and @bq_ed THEN sat05.qty_d_order*sat49.qty_rate else 0.00 end),5),bn_real_qty=round(sum(CASE when sat04.date_of_fill between @bn_st and @bq_ed THEN sat05.qty_d_order*sat49.qty_rate else 0.00 end),5),bj_real_qty=round(sum(CASE when sat04.date_of_fill between @bj_st and @bq_ed THEN sat05.qty_d_order*sat49.qty_rate else 0.00 end),5),bq_real_amt=round(sum(CASE when sat04.date_of_fill between @bq_st and @bq_ed THEN sat05.amt_d_order else 0.00 end),5),bn_real_amt=round(sum(CASE when sat04.date_of_fill between @bn_st and @bq_ed THEN sat05.amt_d_order else 0.00 end),5),bj_real_amt=round(sum(CASE when sat04.date_of_fill between @bj_st and @bq_ed THEN sat05.amt_d_order else 0.00 end),5),bq_real_return_amt=0.00,bn_real_return_amt=0.00,bj_real_return_amt=0.00,tq_real_qty=round(sum(CASE when sat04.date_of_fill between @tq_st and @tq_ed  THEN sat05.qty_d_order*sat49.qty_rate else 0.00 end),5),tn_real_qty=round(sum(CASE when sat04.date_of_fill between @tn_st and @tq_ed THEN sat05.qty_d_order*sat49.qty_rate else 0.00 end),5),tj_real_qty=round(sum(CASE when sat04.date_of_fill between @tj_st and @tq_ed THEN sat05.qty_d_order*sat49.qty_rate else 0.00 end),5),tq_real_amt=round(sum(CASE when sat04.date_of_fill between @tq_st and @tq_ed THEN sat05.amt_d_order else 0.00 end),5),tn_real_amt=round(sum(CASE when sat04.date_of_fill between @tn_st and @tq_ed THEN sat05.amt_d_order else 0.00 end),5),tj_real_amt=round(sum(CASE when sat04.date_of_fill between @tj_st and @tq_ed THEN sat05.amt_d_order else 0.00 end),5),tq_real_return_amt=0.00,tn_real_return_amt=0.00,tj_real_return_amt=0.00 from sat04,sat05,sat49,sam20_a,sam21 ,ctlm08 where sat04.com_id=sat05.com_id and sat04.p_g_order_no=sat05.p_g_order_no and sat49.com_id=sat05.com_id  and sat49.item_no=sat05.item_no and sam20_a.com_id = sam21.com_id and sam20_a.s_man_code = sam21.s_man_code and sam20_a.com_id =sat04.com_id AND sam20_a.c_code=sat04.c_code and sam21.item_no=sat05.item_no and  sam20_a.com_id = ctlm08.com_id and sam20_a.dept_id=ctlm08.dept_id and sat04.com_id=@com_id AND (sat04.date_of_fill between @bn_st and @bq_ed or sat04.date_of_fill between @tn_st and @tq_ed ) and ctlm08.parentdept_id = @parentdept_id group by sat49.category_no,ctlm08.parentdept_id,sam20_a.dept_id'

/*产品类 计算销售回款*/
set @ls_sql3 ='select category_no=sat49.category_no,parentdept_id=ctlm08.parentdept_id,dept_id=sam20_a.dept_id,bq_plan_qty=0.00,bn_plan_qty=0.00,bj_plan_qty=0.00,nd_plan_qty=0.00,bq_plan_amt=0.00,bn_plan_amt=0.00,bj_plan_amt=0.00,nd_plan_amt=0.00,bq_plan_return_amt=0.00,bn_plan_return_amt=0.00,bj_plan_return_amt=0.00,nd_plan_return_amt=0.00,bq_real_qty=0.00,bn_real_qty=0.00,bj_real_qty=0.00,bq_real_amt=0.00,bn_real_amt=0.00,bj_real_amt=0.00,bq_real_return_amt=round(sum(CASE when sat_assign.income_date between @bq_st and @bq_ed THEN sat_assign.assign_amt else 0.00 end),5),bn_real_return_amt=round(sum(CASE when sat_assign.income_date between @bn_st and @bq_ed THEN sat_assign.assign_amt else 0.00 end),5),bj_real_return_amt=round(sum(CASE when sat_assign.income_date between @bj_st and @bq_ed THEN sat_assign.assign_amt else 0.00 end),5),tq_real_qty=0.00,tn_real_qty=0.00,tj_real_qty=0.00,tq_real_amt=0.00,tn_real_amt=0.00,tj_real_amt=0.00,tq_real_return_amt=round(sum(CASE when sat_assign.income_date between @tq_st and @tq_ed THEN sat_assign.assign_amt else 0.00 end),5),tn_real_return_amt=round(sum(CASE when sat_assign.income_date between @tn_st and @tq_ed THEN sat_assign.assign_amt else 0.00 end),5),tj_real_return_amt=round(sum(CASE when sat_assign.income_date between @tj_st and @tq_ed THEN sat_assign.assign_amt else 0.00 end),5)from sat_assign,sat49, sam20_a,sam21,ctlm08 where sat49.com_id=sat_assign.com_id and sat49.item_no=sat_assign.item_no and sam20_a.com_id = sam21.com_id and sam20_a.s_man_code = sam21.s_man_code and sam20_a.com_id =sat_assign.com_id AND sam20_a.c_code=sat_assign.corr_id and sam21.item_no=sat_assign.item_no and sam20_a.com_id=ctlm08.com_id and sam20_a.dept_id=ctlm08.dept_id and sat_assign.com_id=@com_id and (sat_assign.income_date between @bn_st and @bq_ed or sat_assign.income_date between @tn_st and @tq_ed) and sat_assign.assign_type ="4" and ctlm08.parentdept_id =@parentdept_id group by sat49.category_no,ctlm08.parentdept_id,sam20_a.dept_id'
set @ls_sql ='select category_no=a.category_no,category_name=sat48.category_name,unit=sat48.unit,dept_id=a.dept_id,dept_name=ctlm08.dept_name,bq_plan_qty=sum(a.bq_plan_qty),bn_plan_qty=sum(a.bn_plan_qty),bj_plan_qty=sum(a.bj_plan_qty),nd_plan_qty=sum(a.nd_plan_qty),bq_plan_amt=sum(a.bq_plan_amt),bn_plan_amt=sum(a.bn_plan_amt),bj_plan_amt=sum(a.bj_plan_amt),nd_plan_amt=sum(a.nd_plan_amt),bq_plan_return_amt=sum(a.bq_plan_return_amt),bn_plan_return_amt=sum(a.bn_plan_return_amt),bj_plan_return_amt=sum(a.bj_plan_return_amt),nd_plan_return_amt=sum(a.nd_plan_return_amt),bq_real_qty=sum(a.bq_real_qty),bn_real_qty=sum(a.bn_real_qty),bj_real_qty=sum(a.bj_real_qty),bq_real_amt=sum(a.bq_real_amt),bn_real_amt=sum(a.bn_real_amt),bj_real_amt=sum(a.bj_real_amt),bq_real_return_amt=sum(a.bq_real_return_amt),bn_real_return_amt=sum(a.bn_real_return_amt),bj_real_return_amt=sum(a.bj_real_return_amt),tq_real_qty=sum(a.tq_real_qty),tn_real_qty=sum(a.tn_real_qty),tj_real_qty=sum(a.tj_real_qty),tq_real_amt=sum(a.tq_real_amt),tn_real_amt=sum(a.tn_real_amt),tj_real_amt=sum(a.tj_real_amt),tq_real_return_amt=sum(a.tq_real_return_amt),tn_real_return_amt=sum(a.tn_real_return_amt),tj_real_return_amt=sum(a.tj_real_return_amt)  from ('+ @ls_sql1 + ' union '+@ls_sql2+' union '+@ls_sql3 +') as a,sat48,ctlm08 where a.category_no=sat48.category_no and a.dept_id=ctlm08.dept_id and sat48.com_id=@com_id and ctlm08.com_id=@com_id  group by a.category_no,sat48.category_name,sat48.unit,a.dept_id,ctlm08.dept_name '
exec(@ls_sql)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 09:58:40 | 显示全部楼层
怎么样了?存储过程里有什么不合适的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 10:07:08 | 显示全部楼层
那位在阿?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 10:20:16 | 显示全部楼层
跟参数有关系吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 10:21:42 | 显示全部楼层
参数应该只是过滤数据,与字段的现实没有关系阿?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 10:54:07 | 显示全部楼层
怎么那么久不会阿?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 10:54:54 | 显示全部楼层
来看过就回一下啊!!!很急啊,老是这个地方卡。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-8 10:55:35 | 显示全部楼层
今天要把报表做出来阿
回复 支持 反对

使用道具 举报

发表于 2008-3-8 13:05:36 | 显示全部楼层
目前没有Sybase的环境,要等到周一才可以
楼主如果今天必须做,可以先不用存储过程数据集,用TQuery执行存储过程看看

把sybase 客户端执行存储过程的语句对TQuery.,CommandText赋值
然后执行TQuery.Open看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 07:46 , Processed in 0.046392 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表