2012-01-25 4 views
5

두 개의 열을 알파벳 순으로 참조하여 정렬하려고합니다. 여기서 company_name은 기본 정렬이지만 company_name이 없으면 last_name을 기준으로 정렬합니다. 나는 아래 예를 열거 할 것이다.첫 번째 열이 null 인 경우 두 번째 열을 사용하여 알파벳순으로 정렬합니다.

COMPANY_NAME (주 정렬 열)
1 ABC 운송
2 천재
4 익스트림 윈도우 난방

LAST_NAME (보조 열)
1 브라이언트
2 로저스
3 플린트
4 루이스

이 같은개

정렬 :
1 ABC의 운송
4 익스트림 윈도우

이 가능하다조차 또는 난 그냥 배열로 이러한 병합과 PHP를 사용하여 분류한다 난방
3 플린트
이 천재?

답변

6

대소 문자를 사용하여 '이름'으로 열을 선택하여 선택하십시오. 가장 좋은 예를 보여줍니다.

정말로 원한다면 order by 절에서 case 문을 사용할 수도 있습니다.
필자는 위의 내용이 PHP의 논리를 더 이상 가지고 있지 않기 때문에 문제에 대한 더 나은 해결책이라고 생각하지만 동의하지 않을 수 있습니다.

SELECT company_name, last_name 
FROM mytable 
ORDER BY CASE WHEN company_name IS NULL THEN last_name ELSE company_name END ASC 

편집 : 나는 단지 company_name IS NULL이 맞다고 가정합니다. 당신이 다른 조건에 이것을 할 필요가 있다면 당신은 자신의 운동입니다. 그것은 null입니까? 대신 ''과 비교해야합니까?

+0

수있는 필드가 null 빈과하지 않은 경우 사용할 수 있습니까? –

+0

나는 비어있는 경우 필드를 null로 만들거나 ''로 평가할 수 있습니다. 지금은 필드가 null이 아닙니다. –

+0

조건은'where' 절에서 사용하는 것과 같습니다. 'select * from tablename company_name = '''만약 빈 company_names가있는 모든 행을 얻는다면'company_name = '''을 조건으로 사용하고 싶을 것입니다. – user606723

1

user606723의 대답을 빌려주지만, 이것이 더 일반적으로 MySQL에서 구현되는 방식을 보여줍니다. 이것은 IFNULL()입니다.

IFNULL()은 첫 번째 표현식이 null 인 경우를 제외하고 첫 번째 표현식을 반환하고 두 번째 표현식을 반환합니다. 이러한 유형의 시나리오를 위해 설계되었습니다.

SELECT 
    IFNULL(company_name, last_name) AS name 
FROM mytable 
ORDER BY name 

편집

COMPANY_NAME 대신 널 (NULL)의 공백을 보유하고있는 경우, 당신은이 작업을 수행 할 수 있습니다

SELECT 
    IF(company_name <> '', company_name, last_name) AS name 
FROM mytable 
ORDER BY name 

를 IF 문으로, 첫 번째 표현식이 true로 평가되면, 그것은 두 번째 표현식을 반환하고, 그렇지 않으면 세 번째 표현식을 반환합니다. 당신이 NULL 또는 빈을해야 할 수도

, 다음이 작동합니다

SELECT 
    IF(company_name IS NOT NULL AND company_name <> '', company_name, last_name) AS name 
FROM mytable 
ORDER BY name 
+0

예제와 606723 모두 거의 효과가 있습니다. 나는 뭔가 작은 것을 잃어버린 것 같은 기분이 든다. 출력은 다음과 같습니다. 다음과 같은 정렬 : 1 ABC 트럭 2 천재 난방 4 Xtreme Windows 성만있는 행이 없습니다. –

+0

아, 그러면 NULL이 아니에요, 그것은 비어 있습니다. 이를 위해 IF 문을 사용할 수 있습니다. 지금 대답을 업데이트 중입니다. –

+1

IF 문에 실제로 어떤 이점이 있습니까? (또는 실제로 함수입니까?) 사례 진술이 더 보편적으로 정확하다고 느낍니다. 나는 솔직히 이것을 나쁜 습관이라고 생각하지만 아마도 나는 무언가를 모르고있다. – user606723

관련 문제