代码之家  ›  专栏  ›  技术社区  ›  MTaranto

在SSRS中尝试将“OR”和“and”语句组合在一起

  •  0
  • MTaranto  · 技术社区  · 7 年前

    我在SSRS中组合or/and语句时遇到问题。我使用了几个参数字段,但运气不好。除了开始日期和结束日期之外,我还可以使用数据集中的查询对其他参数进行多选。我的问题是获得所有的福利、扣除额和工资代码,然后将它们限制在一个日期范围内。未筛选日期。

    SELECT
      UPR30100.EMPLOYID
      ,UPR30100.CHEKDATE AS [UPR30100 CHEKDATE]
      ,UPR30100.CHEKNMBR
      ,UPR30100.PYADNMBR
      ,UPR30300.PYRLRTYP
      ,UPR30300.PAYROLCD
      ,UPR30300.CHEKDATE AS [UPR30300 CHEKDATE]
      ,UPR30300.UNTSTOPY
      ,UPR30300.PAYRATE
      ,UPR30300.UPRTRXAM
      ,UPR00100.LASTNAME
      ,UPR00100.FRSTNAME
      ,UPR00100.ADRSCODE
      ,UPR00100.BRTHDATE
      ,UPR00100.SOCSCNUM
      ,UPR00100.STRTDATE
      ,UPR00100.BENADJDATE
      ,UPR00100.LASTDAYWORKED_I
      ,UPR30100.VOIDED
      ,UPR30300.DAYSWRDK
      ,SY01200.INET1
      ,UPR00102.ADDRESS1
      ,UPR00102.ADDRESS2
      ,UPR00102.CITY
      ,UPR00102.[STATE]
      ,UPR00102.ZIPCODE
    FROM
      UPR30100
      INNER JOIN UPR30300
        ON UPR30100.CHEKNMBR = UPR30300.CHEKNMBR
      INNER JOIN UPR00100
        ON UPR30100.EMPLOYID = UPR00100.EMPLOYID
      INNER JOIN UPR00102
        ON UPR00100.ADRSCODE = UPR00102.ADRSCODE AND UPR00100.EMPLOYID = UPR00102.EMPLOYID
      INNER JOIN SY01200
        ON UPR00102.EMPLOYID = SY01200.Master_ID AND UPR00102.ADRSCODE = SY01200.ADRSCODE
    WHERE UPR30300.PAYROLCD in (@Paycodes)or UPR30300.PAYROLCD in (@Benefits)or UPR30300.PAYROLCD in (@Deductions) and UPR30300.chekdate between (@Begindate) and (@Enddate)
    

    谢谢 迈克

    2 回复  |  直到 7 年前
        1
  •  1
  •   RoMEoMusTDiE    7 年前

    你把where子句搞砸了。请在下面尝试。

    WHERE 
      UPR30300.PAYROLCD in (@Paycodes,@Benefits,@Deductions) 
      and UPR30300.chekdate between (@Begindate) and (@Enddate)
    
        2
  •  0
  •   ying lam    7 年前

    将三个in合并为一个in

    这里是30300。工资总额(@工资代码,@福利,@扣除额)和UPR30300。日期介于(@Begindate)和(@Enddate)之间

    或在in周围使用括号

    其中(UPR30300.payrocd in(@Paycodes)或UPR30300。支付(@福利)或UPR30300。支付(@扣减额))和UPR30300。日期介于(@Begindate)和(@Enddate)之间