把你语句中Where部分的“.. = (select ..”全部换成“.. in (select ..”

解决方案 »

  1.   

    因为通过Select出来的是一个集合类型,不能用 字段值 = 集合 ,而应该是 字段值 in 集合
      

  2.   

    ZSGiftSignIn_d.ZGift_ID=( case when @Gift='全部' then (select ZGift_ID from ZSGiftInfo ) else (select ZGift_ID from ZSGiftInfo where ZGift_Desc=@Gift) end))
    类似上面的case语句全部改为
      ((@Gift='全部') and (ZSGiftSignIn_d.ZGift_ID in (select ZGift_ID from SGiftInfo )) or ((@Gift<>'全部') and (select ZGift_ID from ZSGiftInfo where ZGift_Desc=@Gift))
      

  3.   

    因为case ... when ... then (这里只能写表达式,也是一个值,而不能写集合)
      

  4.   

    set @sumqtyvip = select sum(zqty) from ZSGiftSignIn_d,ZSGiftSignIn_m where ZSGiftSignIn_d.ZGift_ID in (select ZGift_ID from ZSGiftInfo WHERE ZGIFT_CATEGORY='普通卡') AND ZSGIFTSIGNIN_M.ZVOUCH_ID=ZSGIFTSIGNIN_D.ZVOUCH_ID AND ((@ZVIP_CLASS='全部' AND ZSGIFTSIGNIN_D.ZSCORE_ID IN (SELECT ZSCORE_ID FROM ZSMEMBERINFO)) OR (@ZVIP_CLASS<>'全部' AND ZSGIFTSIGNIN_D.ZSCORE_ID IN (SELECT ZSCORE_ID FROM ZSMEMBERINFO WHERE ZVIP_CLASS=@ZVIP_CLASS))) AND ZSGIFTSIGNIN_M.ZSTART_DATE = @DATA AND ((@GIFT='全部' AND ZSGIFTSIGNIN_D.ZGIFT_ID IN (SELECT ZGIFT_ID FROM ZSGIFTINFO)) OR (@GIFT='全部' AND ZSGIFTSIGNIN_D.ZGIFT_ID IN (SELECT ZGIFT_ID FROM ZSGIFTINFO WHERE ZGIFT_DESC=@GIFT)))