我的实时查询报告存在问题。在我的报告中,我有5个参数可以选择日期范围@DateFrom
和@DateTo
以及3个应该允许选择特定属性的参数:
@salesid, @batch, @serial
我想强制使用日期范围参数,并且该工作没有任何问题,但最后3个参数:@salesid
,@batch
,@serial
应该是可选的。
但他们没有按照自己的意愿行事。最后3个参数应该允许您键入可用作过滤器的值。但是当我选择日期和其中一个参数时,我得到的是查询的整个值而不是选定的值。
在我选择的参数属性中"允许空白值("")"选项,以防我将默认值定义为空白。
我的查询中的条件如何:
where
st.custaccount <> 'number%'
and datepart(year,st.CREATEDDATETIME) >= 2012
and (ita.VENDORCODE like'producer1' or ita.vendorcode like 'producer2')
and st.createddatetime >= @FromDate
and st.createddatetime <= @ToDate
or (st.salesid = @salesid or @salesid is null)
or (itd.INVENTBATCHID = @batch or @batch is null)
or (itd.INVENTSERIALID = @serial or @serial is null)
理论上它应该有用但是......好吧但实际上并非如此。
如何设置条件以获得所需效果?到目前为止,我找不到任何有用的东西。如果你们中的任何人知道有用的东西,请给我一些线索。
答案 0 :(得分:0)
您需要将最终的3 or
语句更改为and
语句。
目前,您的查询主要是检查符合条件的数据项 OR ,这些最后三个参数中的任何一个都匹配/ null。这意味着即使您的数据不是日期范围等,它仍将被返回:
where st.custaccount <> 'number%'
and st.CREATEDDATETIME >= '20120101' -- Try not to use functions in your WHERE clause, as this stops indexes from working, making your query less efficient.
and ita.VENDORCODE in('producer1', 'producer2') -- IN has the same effect.
and st.createddatetime between @FromDate and @ToDate -- BETWEEN is an inclusive date range. Equivalent to >= and <=
and (st.salesid = @salesid
or @salesid is null
)
and (itd.INVENTBATCHID = @batch
or @batch is null
)
and (itd.INVENTSERIALID = @serial
or @serial is null
)