【问题标题】:Trying to combine "OR" and "And" statements together in SSRS尝试在 SSRS 中将“OR”和“And”语句组合在一起
【发布时间】:2018-01-04 21:20:04
【问题描述】:

我在 SSRS 中组合或/和语句时遇到问题。我正在使用几个参数字段,但没有任何运气。除了开始日期和结束日期外,我可以使用数据集中的查询对其他参数进行多选选择。我的问题是获得所有福利、扣除和支付代码,然后将它们限制在一个日期范围内。日期未被过滤。

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)

谢谢! 迈克

【问题讨论】:

  • 或许WHERE ( ... OR... OR ...) AND ...?
  • 有两个问题:in的优先级低于and,所以毕竟ands会被应用,可能带来的行数比预期的多;另一个问题是使用带有变量的in。如果变量包含一个列表,这是通过命名预期的,你应该使用动态 sql,或者,如果你使用 Sql Server 2016,使用 STRING_SPLIT 函数的子查询将列表转换为单列表。

标签: sql sql-server reporting-services parameters


【解决方案1】:

您的 OR 和 IN 以及 AND 弄乱了 where 子句。试试下面。

WHERE 
  UPR30300.PAYROLCD in (@Paycodes,@Benefits,@Deductions) 
  and UPR30300.chekdate between (@Begindate) and (@Enddate)

【讨论】:

    【解决方案2】:

    将三进合二为一

    WHERE UPR30300.PAYROLCD in (@Paycodes, @Benefits, @Deductions) 和 UPR30300.chekdate 在 (@Begindate) 和 (@Enddate) 之间

    或在 in 周围使用括号

    WHERE((@Paycodes) 中的 UPR30300.PAYROLCD 或 (@Benefits) 中的 UPR30300.PAYROLCD 或 (@Deductions) 中的 UPR30300.PAYROLCD)和 UPR30300.chekdate 在 (@Begindate) 和 (@Enddate) 之间

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 2011-02-04
      • 2018-08-10
      • 2010-12-20
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多