2011-05-11 2 views
1

SQL Server에서 where in 조건을 사용하고 있습니다. 나는 'where in'조건에 대한 목록을 주었기 때문에 순서없이 결과를 얻고 싶습니다. SQL Server : 주문하지 않고 선택

select * from blabla where column in ('03.01.KO61.01410', 
'03.02.A081.15002', 
'03.02.A081.15016', 
'03.02.A081.15003', 
'02.03.A081.57105') 

내가 어떻게 할 수있는 예를

를 들어

?

+1

쿼리 확인을 보인다. 뭐가 문제 야? –

+0

결과는 내 상황에 언급 된 순서대로 있어야합니다. – esquare

답변

1

을, SQL 서버 무작위로 WHERE-IN 절에 대한 결과 세트를 주문하면 방법을 지정하지 않는 경우 주문 해.

따라서 WHERE-IN 조건으로 주문하려면 통과 할 때 주문할 데이터 항목을 정의해야합니다. 그렇지 않으면 SQL Server가 무작위로 결과 집합을 정렬합니다.

2

이미 수행 중입니다. ORDER BY을 사용하여 명시 적으로 주문을 지정하지 않으면 암시 적 주문이 없습니다. 당신이 완전히 출력을 랜덤하려면

, 당신은 ORDER BY NEWID() 절 추가 할 수 있습니다 때문에 내 경험에

SELECT (list of columns) 
FROM dbo.blabla 
WHERE column IN ('03.01.KO61.01410', '03.02.A081.15002', 
        '03.02.A081.15016', '03.02.A081.15003', '02.03.A081.57105') 
ORDER BY NEWID() 
+0

아니요. 나는 SQL 순서를 원하지 않습니다. 나는 조건문을 어디에 써 놓았 는가? 그것은 어디에서와 같이 있어야합니다. 그러나 SQL은 ASC에 따라 자동으로이를 주문합니다. 나를 이해해? – esquare

+2

RDBMS에 의해 리턴 된 결과의 순서는 order by가 사용되지 않는 한 정의되지 않습니다. 데이터, 인덱스 등에서 아무 것도 변경되지 않으면 동일한 쿼리의 결과를 동일한 순서로 꽤 오랜 시간 동안받을 수 있습니다. 그런 다음 언젠가 무언가가 변경됩니다 (데이터 추가, 삭제 또는 업데이트, 인덱스 추가/삭제, 데이터 파일이 다른 디스크로 마이그레이션 됨 등). 그러면 순서가 변경됩니다. 결과 세트에 표시되는 순서는 언젠가는 달라질 때까지 본질적으로 '정렬되지 않음'입니다. newid()에 의한 marc_s의 순서를 잘 보아라. 이것은 무작위 순서에 가깝다. – Karl

0

테이블에 자동 증가 ID가있는 경우 주문 절에서 사용하십시오. 그리고 그렇지 않다면, 하나를 추가하는 것을 고려하십시오 ...

4

행이 IN의 항목과 동일한 순서로 반환되도록하려면, 다음과 같이 지정할 수있는 방법을 찾아야합니다. ORDER BY 절 - SQL Server에서 주문을 정의하는 유일한 방법입니다. 예컨대 :

select * from blabla where column in ('03.01.KO61.01410', 
'03.02.A081.15002', 
'03.02.A081.15016', 
'03.02.A081.15003', 
'02.03.A081.57105') 
order by 
CASE column 
when '03.01.KO61.01410' then 1 
when '03.02.A081.15002' then 2 
when '03.02.A081.15016' then 3 
when '03.02.A081.15003' then 4 
when '02.03.A081.57105' then 5 
end 
0

이 시도 : http://www.sommarskog.se/arrays-in-sql-2008.html

에서

CREATE TYPE varchar20_list_type AS TABLE (
    id INT IDENTITY PRIMARY KEY, 
    val VARCHAR(20) NOT NULL UNIQUE 
) 

DECLARE @mylist varchar20_list_type 
INSERT @mylist (val) VALUES 
    ('03.01.KO61.01410'), 
    ('03.02.A081.15002'), 
    ('03.02.A081.15016'), 
    ('03.02.A081.15003'), 
    ('02.03.A081.57105') 

SELECT 
    * 
FROM 
    blabla 
    JOIN @mylist AS t 
    ON 
     blabla.col = t.val 
ORDER BY 
    t.id 

추가 정보 그런데이 쉽게 값으로 PostgreSQL을 수행 할 수 있습니다 http://www.postgresql.org/docs/9.0/static/queries-values.html

관련 문제