2016-07-25 5 views
3

설명 제목이 너무 어려워서 내가 원하는 것을 표현하는 더 좋은 방법은 예제를 사용하는 것입니다.두 개의 varchar 열에 의한 MySQL 순서

NAME | EMAIL 
John | [email protected] 
Mike | [email protected] 
NULL | [email protected] 
Bill | [email protected] 

나는 결과가 될 수 있도록 쿼리를 주문하려는 :의 내가 다음에 테이블이 있다고 가정하자가 명확하지 않으면

NAME | EMAIL 
NULL | [email protected] 
Bill | [email protected] 
John | [email protected] 
Mike | [email protected] 

를,이 두 이름으로 주문해야하고 NAME 열에 해당 행에 대한 항목이 없을 때 두 가지 우선 순위가 혼합되어 있습니다. 따라서 NAME이 NULL이면 EMAIL의 값을 사용하여 다른 행과 관련하여 해당 행을 정렬하지만 NAME이 NULL이 아닌 경우 NAME을 사용하고 EMAIL을 사용하여 정렬하지 않습니다.

짐작할 수 있듯이 ORDER BY name ASC, email ASC은 그럴 수 없습니다. 나는 Google에 이것을 어떻게하는지 잘 모르겠다. 그래서 나는 SO로 향했다. 미리 감사드립니다.

답변

0
SELECT * 
FROM yourtable 
ORDER BY CASE 
      WHEN name IS NULL THEN email 
      ELSE name 
      end, 
      email 

http://sqlfiddle.com/#!9/0f48ec/2

+0

답변이 많았지 만 이것이 처음 본 것입니다. 내가 끝내었던 것 (나는 조인과 추가 할 논리가 더 많았지 만 그래)과 일치했다. – Orlando

+0

글쎄, 다른 사람들은주의 깊게 읽지 않았다. :) 당신의 예제를 기반으로 대부분의 대답은 모든 NULL이 최상위라고 가정했지만, 당신이 필요로하는 것은 분명하지 않다. –

0

CASE 표현을 사용하십시오.

QUERY

SELECT* FROM your_table_name 
ORDER BY CASE WHEN NAME IS NULL THEN 0 ELSE 1 END, NAME, EMAIL; 
0
select name, email 
from my_table 
ORDER BY name IS NULL DESC, NAME ASC, EMAIL ASC 
+0

안녕하세요, 당신은 저를 설명해주십시오 수 있을까? '주문'에 '이름'과 '이메일'로 동일한 결과를 얻지 않겠습니까? –

+0

@MridulKashyap 당신이 사용하지 않으면 firts 순서 null 값은 끝에 위치 .. sintax 의미 firts null then then others – scaisEdge

+0

"ORDER BY를 수행 할 때 ORDER BY를 수행하면 NULL 값이 먼저 표시됩니다 BY ... ASC 그리고 마지막으로 ORDER BY ... DESC를해라. " 이 [mysql reference] (http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html)를 확인하십시오. 오름차순으로 이름과 이메일이 필요하기 때문에 "IS NULL"을 넣어야 할 필요가 있을까요? –

2

한 가지 방법은 정렬 기준으로 열을 추가하는 것입니다 :

SELECT 
    NAME, 
    EMAIL, 
    IFNULL(NAME, EMAIL) AS sort_column 
FROM 
    mytable 
ORDER BY 
    sort_column 
0
SELECT TOP 1000 [Name] 
     ,[email] 
    FROM [db1].[dbo].[emailTB] order by 
    CASE WHEN Name !='NULL' THEN [Name] else NULL end ,email 

그것은 나를 위해 일한! `NULL` 조건이 필요하다고 사용하는 이유

관련 문제