You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS 2014中带OR子句的日期范围参数失效问题求助

问题原因

你的查询失效是因为当@SalesOrdPO为空时,SalesOrders_Rpt.SalesOrdPO like '%' + @SalesOrdPO + '%'会变成like '%%',这个条件会匹配所有记录。OR逻辑下只要其中一个条件成立就会返回数据,所以不管日期范围是否符合,所有数据都会被拉取,导致日期过滤失效。同理,如果日期参数为空,也会出现类似问题。

解决方案

需要给每个过滤条件加上参数非空时才生效的判断,确保只有当用户输入了对应参数时,该条件才会参与过滤。修改后的查询如下:

SELECT [OrdNum]
      ,[EcommOrdNum]
      ,[SalesOrdPO]
      ,[cust_num]
      ,[cust_seq]
      ,[CorpCustNum]
      ,[CorpName]
      ,[CustName]
      ,[Address]
      ,[Address2]
      ,[City]
      ,[State]
      ,[Zip]
      ,[ShipVia]
      ,[Item]
      ,[Qty]
      ,[Price]
      ,[OrderDate]
      ,[ShipDate]
      ,[SerialNum]
      ,[Shipping]
      ,[Tracking]
      ,[OrderStat]
FROM [CRM].[dbo].[SalesOrders_Rpt]
WHERE SalesOrders_Rpt.CorpCustNum = '    321654'
AND (
    -- 仅当日期参数都不为空时,应用日期范围过滤
    (@StartDate IS NOT NULL AND @EndDate IS NOT NULL 
     AND SalesOrders_Rpt.OrderDate >= @StartDate + '00:00:00.000' 
     AND SalesOrders_Rpt.OrderDate <= @EndDate + '23:59:59.000')
    OR
    -- 仅当PO参数不为空/非空字符串时,应用模糊匹配
    (@SalesOrdPO IS NOT NULL AND @SalesOrdPO <> '' 
     AND SalesOrders_Rpt.SalesOrdPO LIKE '%' + @SalesOrdPO + '%')
    OR
    -- 可选:如果需要两个参数都为空时返回所有符合CorpCustNum的数据,保留此条;否则删除
    (@StartDate IS NULL AND @EndDate IS NULL AND (@SalesOrdPO IS NULL OR @SalesOrdPO = ''))
)
关键说明
  • 单独日期过滤:输入@StartDate和@EndDate,留空@SalesOrdPO,此时只有日期条件生效
  • 单独PO过滤:输入@SalesOrdPO,留空日期参数,此时只有PO模糊匹配条件生效
  • 同时过滤:两个参数都输入,此时两个条件同时生效,返回同时符合日期范围和PO匹配的数据
  • 若不需要两个参数都为空时返回所有数据,删除最后一个OR分支即可

内容的提问来源于stack exchange,提问作者Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:25:06