2016-10-04 3 views
-2

아래에 주어진 것처럼 최대 50 개의 행을 가진 테이블이 있습니다.SQL 형식을 특정 형식으로 정렬하는 방법

ID menu dispOdr ParntID 
--------------------- 
1 abc 1  0 
2 cde 2  0 
3 fgh 1  2 
4 ghdfdj 2  2 
5 tetss 1  1 
6 uni 3  0 

는하지만 사전에 .. 어떤 쿼리가 알려 주시기 바랍니다 감사가있는 경우

ID menu dispOdr ParntID 
--------------------- 
1 abc 1  0 
5 tetss 1  1 
2 cde 2  0 
3 fgh 1  2 
4 ghdfdj 2  2 
6 uni 3  0 

처럼

를 정렬하고 싶습니다. 나는 SQL 서버를 2014

+7

원하는 순서에 대한 논리는 무엇입니까? –

+0

예 메뉴 별 오름차순. –

+3

't'가 'c'앞에 오는 언어는 무엇입니까? – Strawberry

답변

0

을 사용하고

나는 쿼리가 아래에 필요한 출력을 생성한다고 생각 :

SELECT t1.ID, t1.menu, t1.dispOdr, t1.ParntID 
FROM mytable AS t1 
LEFT JOIN mytable AS t2 ON t1.ParntID = t2.ID 
ORDER BY CASE 
      WHEN t1.ParntID = 0 THEN t1.dispOdr 
      ELSE t2.dispOdr 
     END, 
     CASE 
      WHEN t1.ParntID = 0 THEN 1 
      ELSE 2 
     END, 
     t1.dispOdr 

첫 번째 CASE 표현 그룹의 기록을 부모의 dispOdr에 따라. 두 번째 CASE은 하위 그룹의 상단에 상위를 배치합니다. 마지막으로 ORDER BY 절에 사용 된 마지막 표현식은 하위 그룹 내의 모든 하위 레코드를 정렬합니다.

참고 : 위의 쿼리는 하나의 중첩 수준에서 작동합니다.

+0

고맙습니다. –

1

나는 현재의 출력 대 원하는 출력이 반대라고 생각합니다. 메뉴 열을 정렬하길 원하지만 이미 나타났습니다.

그래서, 당신은 단순히 BY ORDER를 사용하여 메뉴 열을 정렬 할 수 있습니다 당신은 실제로 두 번째 테이블로 시작되는 가정 :

SELECT * 
FROM mytable 
ORDER BY menu ASC 
관련 문제