2016-11-22 1 views
1

내가 여기에 설명 된 문제에 샘플 테이블 및 쿼리를 가지고SQL의 ORDER

CREATE TABLE test 
(
    ID INT IDENTITY(1, 1), 
    NAME VARCHAR(250), 
    VALUE float 
) 

INSERT INTO test(NAME,[VALUE])VALUES('A',100) 
INSERT INTO test(NAME,[VALUE])VALUES('B',200) 
INSERT INTO test(NAME,[VALUE])VALUES('C',200) 

SELECT * FROM test WHERE ID IN (2,1,3) 

ID   NAME  VALUE 
----------- --------- ---------------- 
1   A   100 
2   B   200 
3   C   200 

QUERY : I 절은 그것의 결과를 제공해야하는 위치에 (2,1,3)를 통과 할 때 아래와 같은 순서 :

ID   NAME  VALUE 
----------- --------- ---------------- 
2   B   200 
1   A   100 
3   C   200 
+1

사용중인 데이터베이스에 질문을 태그하십시오. –

+0

그렇지 않습니다. 그것은'IN' 절에 정의 된 집합에 속하는 각 행을 확인하지만, 행을 가져올 때 결과 집합을 생성합니다. – Alfabravo

+0

당신의 질문은 데이터베이스에 따라 다르므로 어떤 데이터베이스를 사용하는지 알려주십시오 – scaisEdge

답변

1

당신이 DelimitedSplit8K의 사본을 잡아 경우, 당신이 할 수 있습니다 : :

-- assuming these values come in as a parameter: 
DECLARE @searchString varchar(100) = '2,1,3'; 

-- solution using delimitedSplit8K 
SELECT t.ID, t.Name, t.VALUE 
FROM dbo.test t 
JOIN dbo.delimitedSplit8K(@searchString,',') s ON s.item = t.id 
ORDER BY s.itemNumber; 

결과 :

ID   Name VALUE 
----------- ----- ------ 
2   B  200 
1   A  100 
3   C  200 

이 기술을 특히하게 무엇 당신은이 join은 당신이 원하는 것을 할 수 있습니다 훌륭한 방법은 쿼리 실행 계획을 살펴보면 정렬 연산자가 없다는 것입니다.

2

난 당신이 결과가 in 목록의 순서로 기대하는 이유를 모르겠어요. SQL은 으로 작동합니다. 정렬되지 않은 세트; order by 절을 사용하여 명시 적으로 수행하지 않는 한 본질적인 순서는 없습니다.

SQL Server를 사용하고있는 것 같습니다.

SELECT t.* 
FROM test t JOIN 
    (VALUES (2, 1), (1, 2), (3, 3) 
    ) v(id, ordering) 
    ON t.id = v.id 
ORDER BY ordering;