0

저장 프로 시저의 매개 변수로 비트 값을 사용하여 레코드를 포함/제외하는 경향이 있습니다. 내가 SO 게시물이의 기술을 알고있는 데이터 형식 bit의 열을 쿼리를 필터링하려면 지금 쉽다 : Cumulative include records in stored procedure output based on a number of bit parameters비트 매개 변수를 사용하여 저장 프로 시저 내에서 둘 이상의 조건에 대한 레코드를 필터링하는 방법은 무엇입니까?

내가 복합 더와 값 필터링 할 비트 매개 변수를 사용 할 때 어떤 경우는, 그러나있다 하나의 조건보다.

enter image description here

는 저장 프로 시저에 전달되는 bit 매개 변수가 : 여기

은 예입니다.

myproc 0 

위의 호출은 파란색으로 강조 표시된 레코드를 제외한 일부 레코드를 반환합니다.

는 일주일에 한 번에 나는 그 기록 WHERE ((Delta = 0) AND (PriceCurrent = PriceMin))을 축적/

myproc 1 

가 포함 호출해야합니다. 위의 예제에서 데이터 세트에는 파란색으로 강조 표시된 레코드가 모두 포함되어야합니다.

AND ((Delta = 0 AND PriceCurrent = PriceMinMin) 
    OR (@incl_min_price = 1 AND 
     NOT (Delta = 0 AND PriceCurrent = PriceMin))) 

코드가 나를 위해 작동하지 않는 몇 가지 이유를 들어

. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

UPDATE는 :
이 무엇이든 내 논리을 무시하십시오. 난 그냥 비트 값의 단일 매개 변수를 전달하는 레코드를 필터링 싶어요. 즉, myproc 0myproc 1 반면

SELECT * FROM MyTable 
WHERE --several conditions separated by AND/OR 

는 여러 가지 변종에서

AND ((Delta = 0) AND (PriceCurrent = PriceMin)) 
+1

당신은 쿼리를 게시 고려할 수 있습니다 'AND' 전에; 제공된 정보로 논리를 추측하기가 어렵습니다. – techspider

+0

@techspider 논리가 질문과 관련이 없습니다. 내가 알고 싶은 것은 복잡 한 요청'WHERE (Delta = 0) AND (PriceCurrent = PriceMin)'을 전달하는 비트 값을 매개 변수로 필터링하는 방법입니다. –

답변

0

세 가지 옵션을 위 를 생성해야 반환해야합니다 :

create table #tmp (ID int identity(1,1), PriceMin int, PriceCurrent int, Delta as PriceCurrent - PriceMin) 

insert #tmp 
values (10, 12), (10, 10), (10, 15), (9, 12), (3, 3) 

declare @bit bit = 0 

select * 
from #tmp 
where (@bit = 1 or 
      (Delta <> 0 or PriceCurrent <> PriceMin) 
     ) 

select * 
from #tmp 
where (@bit = 1 or 
      (not(Delta = 0 and PriceCurrent = PriceMin)) 
     ) 

select * 
from #tmp 
where @bit = 1 or @bit = case when Delta = 0 and PriceCurrent = PriceMin then 1 else 0 end 
관련 문제