set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER proc [dbo].[L_DaCangKuaiJiFenLei]
(
@Inc_id nvarchar(8),
@CangKu nvarchar(4),
@CangKuSmall nvarchar(4000),
@RiQi_Begin nvarchar(10),
@RiQi_End nvarchar(10)
)
as
begin
declare @CangKuIds nvarchar(4000)
declare @ExecSql nvarchar(4000)
--if(@Inc_id='2')
--begin
-- if(@CangKu='仓1')
-- begin
-- set @CangKuIds = '1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 218, 219, 222, 213, 194, 156, 146,252'
-- end
-- else if(@CangKu='仓2')
-- begin
-- set @CangKuIds = '227,228,229,230,231,223,224,225,226,232,233,234,235,236,237,238,239,240,241,242,243,253'
-- end
-- else if(@CangKu='仓3')
-- begin
-- set @CangKuIds = '304,293,294,295,296,297,298,299,300,301,302,303'
-- end
-- else if(@CangKu='仓4')
-- begin
-- set @CangKuIds = '251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271'
-- end
-- else if(@CangKu='所有')
-- begin
-- set @CangKuIds = '1,2,3,4,5,6,7,9,10,11,12,13,15,16,218,219,222,213,194,156,146,227,228,229,230,231,223,224,225,226,232,233,234,235,236,237,238,239,240,241,242,243,304,293,294,295,296,297,298,299,300,301,302,303,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271'
-- end
--end
--else if(@Inc_id='3')
--begin
-- if(@CangKu='仓1')
-- begin
-- set @CangKuIds = '19,28,29,31,138'
-- end
-- else if(@CangKu='仓2')
-- begin
-- set @CangKuIds = '246,247,248,249,250'
-- end
--end
--else if(@Inc_id='19')
--begin
-- if(@CangKu='仓1')
-- begin
-- set @CangKuIds = '305,306,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,307,308'
-- end
--end
set @CangKuIds=@CangKuSmall
set @ExecSql ='select isnull(T.kuaiJi_sort,'''') as kuaiJi_sort,isnull(T.mer_unit,'''') as mer_unit,sum(T.ZhengChang) as ZhengChang,sum(T.CheJianRuKu) as CheJianRuKu,sum(T.ZhuanCang) as ZhuanCang,sum(T.WaiGou) as WaiGou,sum(T.PanYingPanKui) as PanYingPanKui,sum(T.XiaoShou) as XiaoShou,sum(T.ZuoFei) as ZuoFei,sum(T.ZiYong) as ZiYong,sum(T.ShangYueJieCun) as ShangYueJieCun,sum(T.BenYueRuKu) as BenYueRuKu,sum(T.BenYueChuKu) as BenYueChuKu from
(
select sp.mer_num,sp.mer_spec,cksp.kuaiJi_sort,sp.mer_unit
,
isnull(sum(
case 
when ckzb.inout_modename=''正常'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''ZhengChang''
,
isnull(sum(
case 
when ckzb.inout_modename=''车间入库'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''CheJianRuKu''
,
isnull(sum(
case 
when ckzb.inout_modename=''转仓'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''ZhuanCang''
,
isnull(sum(
case 
when ckzb.inout_modename=''外购'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''WaiGou''
,
isnull(sum(
case 
when ckzb.inout_modename=''盘盈盘亏'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''PanYingPanKui''
,
isnull(sum(
case 
when ckzb.inout_modename=''销售'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''XiaoShou''
,
isnull(sum(
case 
when ckzb.inout_modename=''作废''  and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''ZuoFei''
,
isnull(sum(
case 
when ckzb.inout_modename=''自用''  and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''ZiYong''
,
isnull(
cksp.ultimo_stock+
sum(case when ckzb.bill_type=2 and isnull(ckzb.auditing_flag,0)>1 and 
ckzb.bill_date< '''+@RiQi_Begin+''' 
then ckfb.mer_sum else 0 end)-
sum(case when ckzb.bill_type=1  and isnull(ckzb.auditing_flag,0)>1 
and ckzb.bill_date< '''+@RiQi_Begin+''' 
then ckfb.mer_sum else 0 end),0) as ''ShangYueJieCun''
,
isnull(sum(
case
when  ckzb.bill_type = 2 and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''BenYueRuKu''
,
isnull(sum(
case
when  ckzb.bill_type = 1 and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''')
then ckfb.mer_sum else 0 end),0) as ''BenYueChuKu''
from ral_depot_mer as cksp
left join  tbl_depot_accessorily_bill as ckfb
on cksp.id =ckfb.depot_mer_id
left join  tbl_depot_mostly_bill  as ckzb
on ckzb.id = ckfb.mostly_id
inner join mst_merchandise as sp
on sp.id = cksp.mer_id
where cksp.del_flag = 0 and sp.del_flag = 0
AND cksp.depot_id IN ('+@CangKuIds+') AND mer_fittings in (''管材'',''配件'')
group by sp.mer_num,sp.mer_spec,cksp.kuaiJi_sort,sp.mer_unit,cksp.ultimo_stock) as T group by T.kuaiJi_sort,T.mer_unit order by T.kuaiJi_sort'--print @ExecSql
execute sp_executesql @ExecSql
end上面有一段注释的,我用参数代替了!

解决方案 »

  1.   

    请问下,还有什么解决方案吗?最后是对SQL语句下手
      

  2.   

    SQL 语句能优化的地方就优化,做成视图
      

  3.   

    帮楼主重新贴下。
    set ANSI_NULLS ON 
    set QUOTED_IDENTIFIER ON 
    go ALTER proc [dbo].[L_DaCangKuaiJiFenLei] 

    @Inc_id nvarchar(8), 
    @CangKu nvarchar(4), 
    @CangKuSmall nvarchar(4000), 
    @RiQi_Begin nvarchar(10), 
    @RiQi_End nvarchar(10) 

    as 
    begin 
    declare @CangKuIds nvarchar(4000) 
    declare @ExecSql nvarchar(4000) 
    --if(@Inc_id='2') 
    --begin 
    -- if(@CangKu='仓1') 
    -- begin 
    -- set @CangKuIds = '1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 218, 219, 222, 213, 194, 156, 146,252' 
    -- end 
    -- else if(@CangKu='仓2') 
    -- begin 
    -- set @CangKuIds = '227,228,229,230,231,223,224,225,226,232,233,234,235,236,237,238,239,240,241,242,243,253' 
    -- end 
    -- else if(@CangKu='仓3') 
    -- begin 
    -- set @CangKuIds = '304,293,294,295,296,297,298,299,300,301,302,303' 
    -- end 
    -- else if(@CangKu='仓4') 
    -- begin 
    -- set @CangKuIds = '251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271' 
    -- end 
    -- else if(@CangKu='所有') 
    -- begin 
    -- set @CangKuIds = '1,2,3,4,5,6,7,9,10,11,12,13,15,16,218,219,222,213,194,156,146,227,228,229,230,231,223,224,225,226,232,233,234,235,236,237,238,239,240,241,242,243,304,293,294,295,296,297,298,299,300,301,302,303,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271' 
    -- end 
    --end 
    --else if(@Inc_id='3') 
    --begin 
    -- if(@CangKu='仓1') 
    -- begin 
    -- set @CangKuIds = '19,28,29,31,138' 
    -- end 
    -- else if(@CangKu='仓2') 
    -- begin 
    -- set @CangKuIds = '246,247,248,249,250' 
    -- end 
    --end 
    --else if(@Inc_id='19') 
    --begin 
    -- if(@CangKu='仓1') 
    -- begin 
    -- set @CangKuIds = '305,306,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,307,308' 
    -- end 
    --end 
    set @CangKuIds=@CangKuSmall 
    set @ExecSql ='select isnull(T.kuaiJi_sort,'''') as kuaiJi_sort,isnull(T.mer_unit,'''') as mer_unit,sum(T.ZhengChang) as ZhengChang,sum(T.CheJianRuKu) as CheJianRuKu,sum(T.ZhuanCang) as ZhuanCang,sum(T.WaiGou) as WaiGou,sum(T.PanYingPanKui) as PanYingPanKui,sum(T.XiaoShou) as XiaoShou,sum(T.ZuoFei) as ZuoFei,sum(T.ZiYong) as ZiYong,sum(T.ShangYueJieCun) as ShangYueJieCun,sum(T.BenYueRuKu) as BenYueRuKu,sum(T.BenYueChuKu) as BenYueChuKu from 

    select sp.mer_num,sp.mer_spec,cksp.kuaiJi_sort,sp.mer_unit 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''正常'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''ZhengChang'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''车间入库'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''CheJianRuKu'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''转仓'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''ZhuanCang'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''外购'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''WaiGou'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''盘盈盘亏'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''PanYingPanKui'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''销售'' and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''XiaoShou'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''作废''  and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''ZuoFei'' 

    isnull(sum( 
    case 
    when ckzb.inout_modename=''自用''  and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''ZiYong'' 

    isnull( 
    cksp.ultimo_stock+ 
    sum(case when ckzb.bill_type=2 and isnull(ckzb.auditing_flag,0)>1 and 
    ckzb.bill_date < '''+@RiQi_Begin+''' 
    then ckfb.mer_sum else 0 end)- 
    sum(case when ckzb.bill_type=1  and isnull(ckzb.auditing_flag,0)>1 
    and ckzb.bill_date < '''+@RiQi_Begin+''' 
    then ckfb.mer_sum else 0 end),0) as ''ShangYueJieCun'' 

    isnull(sum( 
    case 
    when  ckzb.bill_type = 2 and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''BenYueRuKu'' 

    isnull(sum( 
    case 
    when  ckzb.bill_type = 1 and isnull(ckzb.auditing_flag,0)>1 and (ckzb.bill_date between '''+@RiQi_Begin+''' and '''+@RiQi_End+''') 
    then ckfb.mer_sum else 0 end),0) as ''BenYueChuKu'' 
    from ral_depot_mer as cksp 
    left join  tbl_depot_accessorily_bill as ckfb 
    on cksp.id =ckfb.depot_mer_id 
    left join  tbl_depot_mostly_bill  as ckzb 
    on ckzb.id = ckfb.mostly_id 
    inner join mst_merchandise as sp 
    on sp.id = cksp.mer_id 
    where cksp.del_flag = 0 and sp.del_flag = 0 
    AND cksp.depot_id IN ('+@CangKuIds+') AND mer_fittings in (''管材'',''配件'') 
    group by sp.mer_num,sp.mer_spec,cksp.kuaiJi_sort,sp.mer_unit,cksp.ultimo_stock) as T group by T.kuaiJi_sort,T.mer_unit order by T.kuaiJi_sort' --print @ExecSql 
    execute sp_executesql @ExecSql 
    end 
    上面有一段注释的,我用参数代替了!