2016-08-09 3 views
0

아래 검색어의 각 카테고리에서 NAME에 대한 ASC 주문 결과를 얻으려고했지만 그 것을 파생시킬 수 없습니다.케이스 별 mysql 주문

select ID,NEWID,NAME from table 
ORDER BY CASE 
    WHEN ID = PID THEN 1 
    WHEN NEWID IS NOT NULL THEN 2 
    ELSE 3 
    END; 

PID가 입력되어 하나의 레코드가 반환되며 첫 번째로 표시되어야하며 나머지는 NEWID를 기반으로해야합니다. 하지만 레코드를 2 섹션에 대한 NAME 기반의 ASC 정렬하려면 (NEWID null 및 Null 아닙니다).

답변

2

를 추가 shuld 도와주세요 당신은 아주 가까이 있었다 ... 그런 다음 1로 설정하는 경우에, 정상에 정확한 당신의 "NEWID"를 떠하려면 다른 모든 지금 2의 ID를 얻을 수, 이름에 따라 보조 추가 주문 이내에 각각 1, 2, 이름이 같은 분류되어 있습니다 :

select ID,NEWID,NAME from table 
ORDER BY CASE 
    WHEN ID = PID THEN 1 
    WHEN NEWID IS NOT NULL THEN 2 
    ELSE 3 
    END, 
    NAME; 

예 : 데이터가

이 있다면 431,

그리고 당신은 "PID"(매개 변수 ID) = 5 각 "경우 플래그"내 첫 번째 위치

CASE FLAG ID Name NewID 
1   5 H  19 (ID=5 floats to the top of the list) 

2   6 L  41 (all others that HAD a NewID value) 
2   2 R  21 
2   1 X  17 

3   4 B  null (all the rest without a NewID) 
3   3 F  null 

공지 사항에 ID # 5로 초래 순서를 찾고 있습니다, 그들은으로 분류되어 있습니다 (심지어 문맥에 대해 하나의 간단한 알파 문자를 사용 했음에도 불구하고)

+0

정확히 내가 뭘 필요 .. 덕분에 많이 @ DRapp – Chandru

+0

@ Chandru, 너 환영합니다 ... 또한 Q & A에 대한 사이트 에티켓 둘러보기 -> 둘러보기를 통해 다른 사람들이 질문을 해결하고 다른 사람들이 자신의 업무에 유사한 문제가있는 경우 어떤 것이 작동하는지 찾을 수 있도록 도움말 -> 둘러보기를 확인하십시오. – DRapp

0

당신은 my_order 열

select 
    ID 
    , NEWID 
    , NAME 
    , CASE 
     WHEN ID = PID THEN 1 
     WHEN NEWID IS NOT NULL THEN 2 
     ELSE 3 
    END as my_order 
from table 
ORDER BY my_order; 
+0

덕분에 @scaisEdge 덕분에 응용 프로그램에 전달할 때 필요하지 않은 것으로 생각되는 결과에 새 열이 추가됩니다. – Chandru

+0

필요한 순서 방법입니다 .. 응용 프로그램에서 충분히 열을 사용하지 마십시오 .. – scaisEdge