0

라이브 쿼리의 보고서에 문제가 있습니다. 내 보고서에서 내가 날짜 범위 @DateFrom@DateTo 및 특정 속성을 선택할 수 있도록해야 3 개 매개 변수를 선택할 수 있도록 5 개 매개 변수가 : 나는 날짜 범위 매개 변수를 의무화 할보고서 작성기 선택적 및 필수 매개 변수

@salesid, @batch, @serial 

을하고 아무 문제없이 작동하고 있지만, 마지막 세 매개 변수 : @salesid, @batch, @serial은 선택 사항입니다.

하지만 제대로 작동하지 않습니다. 마지막 세 매개 변수는 필터로 작동하는 값을 입력해야합니다. 하지만 내가 선택한 날짜와 그 매개 변수 중 하나를 선택한 값 대신 쿼리의 전체 값을 가져옵니다.

매개 변수 속성에서 나는 공백으로 기본값을 정의한 경우에 대비하여 "공백 값 허용 (" ")"옵션을 선택했습니다.

처럼 내 쿼리의 조건 보이는 방법

:

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

최종 3 or 문을 and 문으로 변경해야합니다. 순간

, 당신의 쿼리는 본질적 기준 또는 그 마지막 세 개의 매개 변수 중 하나가/널 (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 
     ) 
+0

이전에 시도했습니다. 그리고 그것은 일종의 일종이며 그렇지 않습니다. 좀 더 specyfic하기 위해 그것은 salesid와 배치를 위해 일하고 있지만 마지막 매개 변수 직렬을 위해 작동하지 않습니다. 매개 변수 속성에 "null 값 허용"옵션을 추가하는 것을 잊어 버렸기 때문에 이전에 두 번째 매개 변수 또는 세 번째 매개 변수로 작업하지 않았다고 언급하는 것을 잊었습니다. 그러나 여전히 세 번째 매개 변수는 결과를 필터링하는 유일한 매개 변수로 사용할 수 없습니다. 거기에 어떤 기능을 사용하지 않고 귀하의 의견에 답변 나는 단지 당신이 보았던 그것을 위해 그것을 변경 클라이언트의 specyfic 값을 게시하고 싶지 않았어. 아직도 내 대답에 대한 대답이 나와 있습니다. – M3How

+0

그리고 사이에 포함하여 힌트를 주셔서 감사합니다, 정말 도움이 :) – M3How