2017-03-01 2 views
0

결과 그룹을 목록에 먼저 표시 한 다음 아래 표의 나머지 결과를 표시해야합니다.동일한 테이블의 유니온으로 결과 정렬

나는 SQL: how to use UNION and order by a specific select?을 시도했지만, 제 경우에는 작동하지 않습니다. 이

SELECT * FROM (
    SELECT id, display as ordered 
     FROM table 
    WHERE id in (...) --these need to be first 
    UNION 
    SELECT id, display 
     FROM table 
    WHERE id not in (...) --these need to be at the end 
) 
ORDER BY ordered 

내 결과 모든 관계없이 내가하는 일의 표시에 의해 주문 돌아 오는 것 같은

내 쿼리 보인다.

나는 Oracle, btw를 사용하고 있습니다.

도움 주셔서 감사합니다.

답변

5

주문을 받으려면 명시 적으로 숫자를 입력해야합니다. 이 쿼리는 첫 번째 결과 집합을 먼저 정렬 한 다음 두 번째 집합을 정렬합니다. 각 그룹에서 결과는 id에 의해 다시 정렬됩니다. union 또는 union all에 대한 필요가 없습니다

select id, display 
from table 
order by (case when id in (. . .) then 1 -- first list 
       when id in (. . .) then 3 -- last list 
       else 2      -- everything else 
      end); 

: 나는 당신이로 수행해야한다고 생각

SELECT id,display FROM (
    SELECT id, display,1 as ordered 
     FROM table 
    WHERE id in (...) --these need to be first 
    UNION 
    SELECT id, display,2 
     FROM table 
    WHERE id not in (...) --these need to be at the end 
) 
ORDER BY ordered,id 
+0

와우, 감사합니다. 감사장 –

+0

@RobM 그 답을 수락 하시겠습니까? 이 방법으로 더 많은 사용자가 혜택을받을 수 있습니다. –

1

(필요하지 않은 경우 제거). 단 하나의 order by 표현.

모든 ID를 원하지 않으면 where 절을 포함해야합니다.

는 (나는 당신의 질문 목록을 구성하는 것에 대한 불분명 조금 찾을 수 있습니다. 그게 정말 적합한 경우가 not in를 사용할 수 있습니다.) 빠른 응답

+0

... 필요할 경우 보조 주문 기준으로 id (또는 기타)를 추가하십시오. – mathguy