2014-04-14 2 views
0

간단한 MySQL 선택이 있으며 회사 이름과 이름으로 주문하고 싶습니다. 테이블의 열은 다음과 같습니다MySQL ORDER BY 빈 열에 대한 보상

COMPANY_NAME

FIRST_NAME

LAST_NAME

나는에 의해 표준 ORDER으로 실행을 선택하면, 다음과 같은 얻을 : 그러나

SELECT COMPANY_NAME, FIRST_NAME, LAST_NAME 
from TABLE_contacts 
WHERE CONTACT_STATUS = 'ACTIVE' 
ORDER BY COMPANY_NAME, FIRST_NAME; 

+------------------+------------+-----------+ 
| COMPANY_NAME  | FIRST_NAME | LAST_NAME | 
+------------------+------------+-----------+ 
|     | Bob  | Jones  | 
|     | Mark  | Doe  | 
| Acme Company  | Joan  | Todd  | 
| Fun Company  |   |   | 
+------------------+------------+-----------+ 

을 목록이 알파벳순으로 필요합니다. 회사 이름이 비어 있거나 이름이 비어있는 경우가 있습니다. 나는 문 아래 해봤

+------------------+------------+-----------+ 
| COMPANY_NAME  | FIRST_NAME | LAST_NAME | 
+------------------+------------+-----------+ 
| Acme Company  | Joan  | Todd  | 
|     | Bob  | Jones  | 
| Fun Company  |   |   | 
|     | Mark  | Doe  | 
+------------------+------------+-----------+ 

하지만 내 결과는 동일합니다 : 내 목표는이 같은 출력하지 않는 경우가 존재하고 이름 경우 회사 이름을 사용하여 알파벳 순서로 나열하는 것입니다 :

SELECT COMPANY_NAME, FIRST_NAME, LAST_NAME 
from TABLE_contacts 
WHERE CONTACT_STATUS='ACTIVE' 
ORDER BY CASE WHEN COMPANY_NAME IS NULL THEN FIRST_NAME ELSE COMPANY_NAME END DESC; 

도움 주셔서 감사합니다!

답변

0

난 당신이 원하는 생각 :

order by coalesce(Company_Name, First_Name) 

그러나,이 Company_NameNULL하지 비어 있다고 가정한다.

order by (case when Company_Name is not null and Company_Name <> '' 
       then Company_Name 
       else First_Name 
      end) 

나는 desc이 예제를 위해 무엇인지 확실하지 않다 : 당신은 당신의 논리의 확장이 필요할 수 있습니다. 원하는 결과가 오름차순입니다.

+0

안녕하세요! 빠른 답변 감사합니다. 불행하게도, 회사 이름이없는 연락처가 먼저 표시되는 첫 번째 예제와 동일한 결과를 얻었습니다. – Jason

+0

@ Jason. . . 수정 된 쿼리를 사용해보십시오. –

+0

그 트릭을 했어 - 고마워! – Jason