2013-01-23 2 views
2

내 테이블에있는 모든 열 sale date 4, sale date 3, sale date 2, sale date 나는 판매 날짜가 있습니다. 비어 있지 않은 경우 페이지 sale date 4에 표시하는 동안 우선 순위가 주어지며 비어있는 경우 sale date 3 다음에 sale date 2 다음에 sale date이 표시됩니다.에 의해 MySQL에서 여러 개의 열을

제 문제는 결과를 정렬하는 중입니다.

**sale date 4** | **sale date 3** | **sale date 2** | **sale date** 
-------------------------------------------------------------------- 
2013-01-24  | 2013-01-24  | 2013-01-24  | 2013-01-24  
2013-01-31  | 2013-01-31  | 2013-01-31  | 2012-11-30  
2013-02-01  | 2013-02-01  | 2013-02-01  | 2013-02-01  
2013-03-08  | 2013-03-08  | 2013-03-08  | 2013-03-08  
----NULL---- | ----NULL----  | 2013-02-28  | 2012-11-02  
----NULL---- | ----NULL----  | ----NULL---- | 2013-02-28 

을 다음과 같이 내가 결과를 받고 있어요 그리고 내가보기에 표시 할 때

1. Sale date = 2013-01-24 
2. Sale date = 2013-01-31 
3. Sale date = 2013-02-01 
4. Sale date = 2013-03-08 
5. Sale date = 2013-02-28 
6. Sale date = 2013-02-28 
을 다음과 같이 될 것

order by 
isnull(`sale date 4`), trim(`sale date 4`) , 
isnull(`sale date 3`), trim(`sale date 3`) , 
isnull(`sale date 2`), trim(`sale date 2`) , 
isnull(`sale date`), trim(`sale date`) asc 

에 의해 순서에 쿼리를 실행

하지만 내가 필요한 것은

1. Sale date = 2013-01-24 
2. Sale date = 2013-01-31 
3. Sale date = 2013-02-01 
4. Sale date = 2013-02-28 
5. Sale date = 2013-02-28 
6. Sale date = 2013-03-08 

어떻게하면됩니까?

+0

열 이름에 공백이 있습니까? –

+0

yes @ shiplu.mokadd.im – Vamsi

+0

MySQL에서는 실제로 열 이름의 공백을 사용할 수 있지만 (모범 사례는 아닙니다.) – helmbert

답변

2

당신은 주문 수에 의해 :

coalesce(`sale date 4`, `sale date 3`, `sale date 2`, `sale date`) 

COALESCE는 예를 들어, 첫 번째 NULL이 아닌 값을 반환 당신이 원하는 무엇

은 아마이 같은 것입니다.

coalesce(1,2,3,4)    returns 1 
coalesce(null,2,3,4)   returns 2 
... 
coalesce(null,null,null,null) returns null 
4

isnull(column)true 또는 false을 반환합니다. 결과적으로 처음 네 개의 레코드가 처음 네 개의 결과 (true > false)가되고 레코드 5와 6이 마지막 두 개의 결과가됩니다. 마지막 두 결과는 sale date 1까지 sale date 4 (두 열 모두 NULL) 순으로 정렬되지만 정렬 된 목록의 마지막 두 항목으로 남습니다.

.. ORDER BY IFNULL(`sale date 4`, IFNULL(`sale date 3`, 
      IFNULL(`sale date 2`, `sale date 1`))) 
+2

그것이 Vamsi가 원했던 것이라면, 나는 COALESCE가 상당히 단순 할 것이라고 생각하지만, spec은 실제로 약간 다른 것을 요구합니다. 그리고 저에게 적어도, unintelligble! – Strawberry

+0

나는 (그리고 예상 된 결과물에 의해 짐작 된 것에서) 질문을 이해 했으므로 이것은 정확히 OP가 원했던 것이다. 'COALESCE'는 실제로 더 간단하지만 (그 것에 대해 알지 못했습니다, 감사합니다!). – helmbert

+0

질문에서 명확하지 않다는 것에 동의합니다. - 그러나 @helmbert는 질문 추상화 갭을 잘 채웠습니다 :-) –

관련 문제