2013-02-25 1 views
0

@UserRoleId = 4 인 경우 검색에 항목을 포함하는 WHERE 절에 조건을 추가해야합니다. 그렇지 않으면 검색에서 제외합니다 (SQL Server).옵션 where 조건 절의 조건문

INSERT INTO @partData 
(
    PartPrefix, 
    PartNumber, 
    MyProDescription, 
    ItemNumber, 
    PartType, 
    Side, 
    VehicleLocation, 
    MyProPrice 
) 
SELECT 
    CASE 
    WHEN LEFT(myParts.MyProDescription, 4) = 'FOIL' THEN 'FOIL' 
    ELSE LEFT(myParts.PartNumber, 3) 
    END, 
    PartNumber, 
    MyProDescription, 
    ItemNumber, 
    PartType, 
    Side, 
    VehicleLocation, 
    MyProPrice 
FROM 
    MyProExport myParts 
WHERE 
    @year BETWEEN myParts.YearFrom AND myParts.YearTo AND 
    myParts.CarMake = @make AND 
    REPLACE(myParts.CarModel, ' ', '') = REPLACE(@model, ' ', '') AND 
    (
    myParts.EngineDisplacement = @engine OR 
    myParts.EngineDisplacement = 'ALL' 
) AND 
    LEFT(myParts.PartNumber, 3) NOT IN ('300','400') -- Exclude these parts if not @UserRoleId = 4 

마지막 문은 @UserRoleId이 = 그 밖에 4의 경우 300과 400은 그냥이를 설정하는 방법에 대한 혼란 스러워요 (300)을 보여 표시하도록 수정 될 필요가있다. 나는 시도했다 :

행운과
CASE 
    WHEN @UserRoleId = 4 THEN LEFT(myParts.Number, 3) NOT IN ('300','400') -- Exclude parts 

... 대신 case 문의

답변

1

, 그냥 AND/OR 논리를 사용합니다.

AND (LEFT(myParts.HollanderNumber, 3) = '300' 
OR (@UserRoleID = 4 AND LEFT(myParts.HollanderNumber, 3) = '400')) 

이 항상 300을 표시 만 @UserRoleID = 4

+0

큰 경우, 나는 그것이 작동하지만 돌아 오는거야 지금 – devHead

+0

그것을 시도 할 것이다 (400)를 표시합니다 (300)의하지 UserRoleId은 4 만 반환 할 때 400의 UserRoleId입니다 4 ... 나는 또한 '200', '500'과 같은 다른 접두사를 포함하는 나머지 부분이 필요합니다. (한 무리 더) 내 게시물이 충분하지 않으면 사과드립니다. – devHead

+0

몇 가지 변경 사항이 필요한대로 작동했습니다. 감사! – devHead