在数据库中行转列,再拼where条件

ALTER   procedure [dbo].[ppSM_GetNJinfo]
  @fcpsern varchar(50), --成品条码 
  @fline  varchar(50), --线体  
  @forder   varchar(50), --订单号
  @fzyh     varchar(50), --专用号 
  @fexp   varchar(50), --型号 
  @fworkDateFrom  DATETIME, --开始时间
  @fworkDateTo   DATETIME --结束时间
as 
    DECLARE @fstrSql varchar(max);

  BEGIN
  SET @fstrSql='';
  ---------------------------------------------------
  IF(@fcpsern<>'')
  BEGIN
    SET @fcpsern=QUOTENAME(@fcpsern,'''');
    SET @fstrSql=' where sern ='+@fcpsern;
  end    
  -------------------------------------------------
  IF(@fline<>'')
  BEGIN
    SET @fline=QUOTENAME(@fline,'''');
    IF @fstrSql <>''
    BEGIN
    SET @fstrSql=@fstrSql+' and linename ='+@fline;
    END
    ELSE
    BEGIN
    SET @fstrSql=' where linename ='+@fline;
    END
  END
  -----------------------------------------------------
  IF(@forder<>'')
  BEGIN
  SET @forder=QUOTENAME(@forder,'''');
  IF @fstrSql <>''
    BEGIN
    SET @fstrSql=@fstrSql+' and orderNum ='+@forder;
    END
    ELSE
    BEGIN
    SET @fstrSql=' where orderNum ='+@forder;
    END
  END
  ----------------------------------------------------
  IF(@fzyh<>'')
  BEGIN
  SET @fzyh=QUOTENAME(@fzyh,'''');
  IF @fstrSql <>''
    BEGIN
    SET @fstrSql=@fstrSql+' and zyh ='+@fzyh;
    END
    ELSE
    BEGIN
    SET @fstrSql=' where zyh ='+@fzyh;
    END
  END
  --------------------------------------------------
  IF(@fexp<>'')
  BEGIN
  --SET @fexp=QUOTENAME(@fexp,'''');
  IF @fstrSql <>''
    BEGIN
    SET @fstrSql=@fstrSql+' and wuliaoDescribe like'+''''+'%'+@fexp+'%''';
    END
    ELSE
    BEGIN
    SET @fstrSql=' where wuliaoDescribe like'+''''+'%'+@fexp+'%''';
    END
  END
  ----------------------------------------------------
 SELECT  sern,linename,orderNum,zyh,wuliaoDescribe,workdate,banciCode,
        isnull(MAX(NDJ),0) AS NDJ,
        isnull(MAX(NDK),0) AS NDK,
        isnull(MAX(NZFQ),0) AS NZFQ,
        isnull(MAX(NSMS),0) AS NSMS,
        isnull(MAX(NYKQ),0) AS NYKQ,
        isnull(MAX(NNXBS),0) AS NNXBS,
        isnull(MAX(NZX),0) AS NZXM
        INTO #T
FROM 
(SELECT sern,linename,orderNum,zyh,wuliaoDescribe, CONVERT(varchar(100), createDate, 23) AS workdate ,banciCode,
        CASE pplace1 WHEN '电机' THEN bujianzyh1 ELSE '' END AS 'NDJ',-------
        CASE pplace1 WHEN '说明书' THEN bujianzyh1 ELSE '' END AS 'NSMS',
        CASE pplace1 WHEN '内纸箱' THEN bujianzyh1 ELSE '' END AS 'NZX',
        CASE pplace2 WHEN '电控' THEN bujianzyh2 ELSE '' END AS 'NDK',--------
        CASE pplace2 WHEN '遥控器' THEN bujianzyh2 ELSE '' END AS 'NYKQ',
        CASE pplace3 WHEN '蒸发器' THEN bujianzyh3 ELSE '' END AS 'NZFQ',--------
        CASE pplace3 WHEN '能效标识' THEN bujianzyh3 ELSE '' END AS 'NNXBS'--------
FROM  dbo.g_chengpinSM_NJInfo
WHERE CONVERT(varchar(10), createDate, 23) >=CONVERT(varchar(10),@fworkDateFrom, 23)
AND CONVERT(varchar(10), createDate, 23)<=CONVERT(varchar(10),@fworkDateTo, 23)
GROUP BY sern,linename,orderNum,zyh,wuliaoDescribe ,CONVERT(varchar(100), createDate, 23),bujianzyh1,bujianzyh2,bujianzyh3,pplace1,pplace2,pplace3,banciCode
) T
GROUP BY sern,linename,orderNum,zyh,wuliaoDescribe,workdate,banciCode

EXEC ('select *from #T'+@fstrSql)
DROP TABLE #T
  end

还有一种在数据库加where条件的方法:

select a.*
    from dbo.pp_order a                               
    where (a.workdate between CONVERT(DATETIME,@fdatebegin,120) and CONVERT(DATETIME,@fdateend,120) )     
     and a.ln_xt =@fline                            
     and(case when @order='' then 1 else CHARINDEX(@order,a.order_sern) end)>0                   
     and(case when @zyh='' then 1 else CHARINDEX(@zyh,a.zyh) end)>0                   
     and(case when @fexp='' then 1 else CHARINDEX(@fexp,a.exp_pcode) end)>0               
     and(case when @fsale_kind='' then 1 else CHARINDEX(@fsale_kind,a.sale_kind) end)>0        
order by a.linename,a.workdate,a.order_sern 

 

转载于:https://www.cnblogs.com/kaifang1028/p/8350881.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值