2013-02-20 3 views
3

SQL-순서는

checkID record_number data Order_number 
a    0  1  2 
a    1  2  0 
a    2  3  1 
a    3  4  3 

가 ieprocedure 데이터를 반환해야 ORDER_NUMBER 컬럼에 따라 레코드를 가져 오는 쿼리를 찾기 갖는 데이터베이스를 고려 이 모든 조인 또는 다른 쿼리?

답변

1
SELECT * 
FROM tablename 
ORDER BY CASE WHEN record_number = 2 THEN 0 ELSE 1 END, record_number; 

SQL Fiddle Demo

이 다음과 같은 순서로 당신에게 당신의 데이터를 제공합니다 :

| CHECKID | RECORD_NUMBER | DATA | ORDER_NUMBER | 
------------------------------------------------- 
|  a |    2 | 3 |   1 | 
|  a |    0 | 1 |   2 | 
|  a |    1 | 2 |   0 | 
|  a |    3 | 4 |   3 | 
+0

이 서식을 사용 귀하의 데이터 결과? [참조] (http://stackoverflow.com/a/14977123/447156) 할 수 있듯이, 나는 이것에 실패했다 :). –

+0

답변을 주셔서 감사합니다,하지만 그것을 일반화하고 싶습니다. 그래서 순서가 동적으로 일어날 수 있습니다 .. 첫 번째 열 (체크 ID), 기본 키입니다 동일합니다. N 개의 결과로 일반화하고 싶습니다. – Ankit

+0

@Ankit - n 개의 결과에 대해서는 n 개의 순서가 있어야합니다. 권리?? '2 번 레코드를 가지고 있습니다. ', ... n? –

1
select * 
from YourTable 
order by 
     case record_number 
     when 2 then 1 
     when 0 then 2 
     when 1 then 3 
     when 3 then 4 
     end 
1

당신은이 상황에 CASE WHEN을 사용할 수 있습니다;

SELECT * 
FROM tbl 
ORDER BY CASE record_number 
       WHEN 2 THEN 1 
       WHEN 0 THEN 2 
       WHEN 1 THEN 3 
       WHEN 3 THEN 4 
       END 

여기 SQL Fiddle DEMO입니다.

| CHECKID | RECORD_NUMBER | DATA | ORDER_NUMBER | 
------------------------------------------------- 
|  a |    2 | 3 |   1 | 
|  a |    0 | 1 |   2 | 
|  a |    1 | 2 |   0 | 
|  a |    3 | 4 |   3 | 
+1

'Run SQL' 버튼 옆에 작은 화살표가 있으며, 그것을 누르고 'Markdown Output'을 선택하십시오. –

+0

@MahmoudGamal 오, 좋았어요! 감사와 +1 .. –

1

가장 좋은 방법은 다음과 같이 분류 검사에 대한 추가 테이블을 생성하는 것입니다 :

record_number sort_seq 
    2    1 
    0    2 
    1    3 
    3    4 

은 다음 표와 함께 가입을 할 무엇

select c.* 
from check as c 
    join sortSeq as s on c.record_number=s.record_number 
order by s.sort_seq 
0
SELECT * 
FROM tablename 
ORDER BY Order_number