2011-12-07 3 views
1

고객이 특정 고객 인 경우 상위 50 개 레코드 만 선택하고 싶습니다. 그렇지 않으면 모든 레코드를 선택하십시오. 나는 다음과 같은 간단한 버전을 가지고있다. SQL 2000을 사용 중입니다.이 작업을 수행 할 수 있습니까?TOP를 사용할 때 SELECT 문의 case 문 사용

DECLARE @custnum AS VARCHAR(7) 
SET @custnum = '1234567' 
SELECT CASE @custnum 
     WHEN '1234567' THEN [TOP 50 DISTINCT] 
     ELSE [DISTINCT] 
     END 
     item1, item2 
FROM myTable 
WHERE myCust = @custnum 

답변

1

그렇게 할 수없는 것처럼!

하지만 IF ELSE 문으로 처리 할 수 ​​있습니다.

의사 코드 :

IF @custnum = '1234567' 
SELECT [TOP 50 DISTINCT] 
     item1, item2 
FROM myTable 
WHERE myCust = @custnum 
ELSE 
SELECT [DISTINCT] 
     item1, item2 
FROM myTable 
WHERE myCust = @custnum 
1

당신은 쿼리의 구문을 변경하는 case을 사용할 수 없습니다.

declare @custnum varchar(7) 
set @custnum = '1234567' 

if (@custnum = '1234567') begin 
    select top 50 distict item1, item2 
    from myTable 
    where myCust = @custnum 
end else begin 
    select distinct item1, item2 
    from myTable 
    where myCust = @custnum 
end 
1

어떻게 TOP을 매개 변수화에 대해 개수 : SQL 서버 2005에서는 2000

당신은 두 개의 별도의 쿼리를 만들어야 할 것입니다하지만 SQL Server의 최고에 대한 experssion을 사용할 수 있습니까? 그것은 여전히 ​​추한 해킹이지만, 적어도 하나의 쿼리 만 필요합니다.

DECLARE @custnum AS VARCHAR(7) 
DECLARE @topcount as int 

SET @custnum = '1234567' 
SELECT @topcount = CASE WHEN @custnum = '1234567' THEN '50' ELSE 2147483647 END 
SELECT DISTINCT TOP (@topcount) 
    item1, item2 
FROM myTable 
WHERE myCust = @custnum 

편집 : 죄송합니다. SQL Server 2000에 대한 것으로 알고 있습니다. 어떤 경우에는 작동하지 않습니다.

+0

좋은 해결 방법입니다. – Milox