set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROCEDURE [dbo].[kaipiao]  
@zjm varchar(20),@dwbh varchar(20),@id int,@select int,@user_no varchar(50),@dept_id varchar(50),@user_priv varchar(50)
AS
/*
外部客户开票选择商品,select 后面字段修改的时候,顺序不要变, as及后边的表示不要改,字段数量也不要改变
*/
if (@id=0 and @select=0)--正常开票zjm
begin
select top 190 a.spid,a.spbh,a.spmch,replace(a.shpgg,'#','号') as shpgg,a.dw as dw, d.cxxx    as cxxx,
case when (case when left(a.spbh,1) in ('Z','J','P') THEN b.hwshl  else (b.hwshl-b.bkxshl/2-abs(b.bkxshl)/2-isnull(e.shl,0)) end  )
/a.jlgg>10  then '10件以上'

解决方案 »

  1.   

    不过是select 里面加了一个case when 条件语句。 了解case when 就知道怎么一回事了
      

  2.   

    不过是select 里面加了一个case when 条件语句。 了解case when 就知道怎么一回事了
      

  3.   

    格式化一下:
    set ANSI_NULLS ON 
    set QUOTED_IDENTIFIER ON 
    go ALTER PROCEDURE [dbo].[kaipiao]  
        @zjm varchar(20),
        @dwbh varchar(20),
        @id int,
        @select int,
        @user_no varchar(50),
        @dept_id varchar(50),
        @user_priv varchar(50) 
    AS begin
        /* 
        外部客户开票选择商品,select 后面字段修改的时候,顺序不要变, as及后边的表示不要改,字段数量也不要改变 
        */ 
        if (@id=0 and @select=0) -- 正常开票zjm 
        begin 
            select top 190 
                a.spid,
                a.spbh,
                a.spmch,
                replace(a.shpgg,'#','号') as shpgg,
                a.dw as dw, 
                d.cxxx as cxxx, 
                case when (case 
                    when left(a.spbh,1) in ('Z','J','P') THEN b.hwshl 
                    else (b.hwshl-b.bkxshl/2-abs(b.bkxshl)/2-isnull(e.shl,0)) 
                    end) / a.jlgg>10 then '10件以上' 
            ..
         
    end