2014-10-06 2 views
-1

"In"절을 사용하는 쿼리가 있습니다. 이제 In 절과 동일한 순서로 결과를 설정하려고합니다. 예를 들어 -"In 절"으로 정렬

select Id,Name from mytable where id in (3,6,7,1) 

결과 세트 : 내가 어떤 임시 테이블을 사용하지 않으

|Id | Name | 
------------ 
| 3 | ABS | 
| 6 | NVK | 
| 7 | USD | 
| 1 | KSK | 

. 하나의 쿼리에서 목표를 달성 할 수 있습니까?

+0

넣고 3 , 6,7,1 in table, INNER JOIN to it, 주문하기 –

+0

면접 질문입니까? 왜 그렇게하고 싶습니까? 왜 단 1 개의 쿼리 만 사용합니까? 그것이 진짜 요구 사항이라면, 당신은 단지 4 대신 수천 개의 행을 가질 것입니다. – Meet

+0

@Meet 인터뷰 질문이 아니지만 그렇습니다. 동료가 저를 속였고 우리 팀을 위해 인터뷰를했습니다 :-) –

답변

2

T-SQL에서 사용이 작업을 수행 할 수있는 case 큰 :

select Id, Name 
from mytable 
where id in (3, 6, 7, 1) 
order by (case id when 3 then 1 when 6 then 2 when 7 then 3 else 4 end); 

또는 charindex()과 :

order by charindex(',' + cast(id as varchar(255)) + ',', 
        ',3,6,7,1,') 
+0

나는 생각합니다. 그는 MSSQL이 아니라 sybase에서만 이것을 원합니다. 따라서 어떤 charindex도 작동하지 않습니다. –

+1

@AnkitBajpai. . . Sybase는'charindex()'를 지원합니다. –

+0

예, Sybase ASE 15는 charindex()를 지원합니다. 처음에는 charindex로 시도했지만 잘못 생각한 것 같습니다. 하지만 고든의 논리로 내 결과를 얻었습니다. 감사 ! –

3

당신은뿐만 아니라 CTE를 사용할 수 있습니다

with filterID as 
(
    3 ID, 1 as sequence 
    union 
    6, 2 
    union 
    7, 3 
    union 
    1, 4 
) 

select mytable.* from mytable 
inner join filterID on filterID.ID = mytable.ID 
order by filterID.sequence ;