2012-10-24 10 views
1

질문은 간단합니다. 답변도 간단 할 것 같습니다.조건부 WHERE 절

시스템은 SQL Server 2008 R2입니다.

저장 프로 시저 sp_WHYWHYWHY에는 3 개의 매개 변수가 사용됩니다. 즉 2 개는 날짜이고 하나는 공급자 코드입니다.

문에 WHERE 절은 다음과 같은 :

OrderDate BETWEEN @StartDate AND @EndDate 
AND SupplierCode = @SupplierCode 

비즈니스 프로세스가 변경되었습니다 - 항상 바와 같이. 이제 공급 업체 코드에는 다른 공급 업체 (예 : ABC라고 가정 해 봅시다)에게 비즈니스와 관련하여 단 하나의 공급 업체 (예 : YY)가 있습니다.

따라서 코드는 ABC을 쿼리 할 때 - YY도 포함해야합니다.

뭔가

OrderDate BETWEEN @StartDate AND @EndDate 
AND SupplierCode = CASE WHEN @SupplierCode = 'ABC' THEN 'YY','ABC' ELSE @SupplierCode END 

처럼 당신이 그런이를 쓸 수있어 -하지만 최종 결과가 있어야한다 무엇을 그냥.

어떻게해야합니까?

& 대답을 읽어 주셔서 감사합니다.

+0

정렬을 참조하는 당신이 supplierCodes 추적 위치를 테이블이 있습니까 시도? –

답변

2

지나치지 마십시오! 공급 업체 코드가 제공된 값인 또는과 일치하도록 제공된 값이 ABC이고 저장된 공급 업체 코드가 YY이됩니다.

는이

AND ([SupplierCode] = @SupplierCode 
OR ([SupplierCode] <> @SupplierCode 
    AND @SupplierCode ='ABC' 
    AND [SupplierCode] = 'YY')) 
+1

분리 기호는 예상대로 작동하려면 대괄호로 묶어야합니다. –

+0

@KirkBroadhurst하지만 그건 ABC & YY를 불문하고 가져올 것입니다. 내 말은 사용자가 XYZ를 보냈을 경우이 코드는 ABC와 YY뿐만 아니라 XYZ도 표시합니다. 나는 그것이 전달 된 가치를 eveluate하기를 원합니다. 전달 된 값이 ABC이면 YY를 포함합니다. 그렇지 않으면 전달 된 값을 사용하십시오. 따라서 전달 된 값이 YY 인 경우에도 YY 만 표시됩니다. 희망은 명확하게. – CeeVei

+0

@CeeVei는 설명에 감사드립니다. 나는 네가 안드리라고 말하고있는 것 같아. 반영 할 답변을 업데이트했습니다. –