2013-09-26 2 views
1

SQL에서 일치하는 기준에 따라 반환 된 행을 다르게 정렬 할 수 있습니까?일치하는 기준에 따라 ORDER BY가 다릅니 까?

예를 들어, 내 웹 페이지에서 이름 또는 우편 번호를 입력 할 수 있습니다. 쿼리는 현재 성, 이름으로 주문합니다. 우편 번호를 입력하지 않으면 이름 대신 우편 번호로 결과를 정렬하고 싶지 않으면 멋지다. 그게 가능하니? 이 질문은 두 개가 아닌 같은 쿼리에서 발생합니다. 잠재적 인 문제 : 입력 된 값이 이름과 우편 번호와 일치하면 어떨까요?

감사합니다.

의사 쿼리 : 쿼리는 검색 조건에 일치하는 필드 추측 할 수있는 방법으로 공식화되기 때문에

SELECT firstName, lastName, zip 
From Users 
WHERE (FirstName LIKE 'search' OR LastName LIKE 'search' OR Zip LIKE 'search') 
ORDER BY LastName, FirstName 
+0

당신은 검색 항목 이름 또는 우편 번호인지를 알아야합니다 - 당신은 할 수 있었다 "ORDER 사례 @mode에 의해 언제 '이름'THEN 성 ELSE 우편 END" –

+0

@ 존 브라운엄 (JohnBingham) 그의 질문에 대해 알고 있거나 모드에 대해 알고 싶어한다고 생각하지 않습니다. 기준과 일치하는 항목이 무엇인지에 관계없이 '컷을 만듭니다'. 예를 들어, 'Mr. Smith91228 '을 데이터베이스에 등록하면 그는'91228' 우편 번호 거주자와 함께 선정 될 것입니다. – dasblinkenlight

답변

1

, 당신은뿐만 아니라 ORDER BY에 일치시킨 하나의 추측을 시도 할 수 있습니다 :

SELECT firstName, lastName, zip 
From Users 
WHERE (FirstName LIKE 'search' OR LastName LIKE 'search' OR Zip LIKE 'search') 
ORDER BY 
    CASE WHEN FirstName LIKE 'search' THEN FirstName ELSE NULL END 
, CASE WHEN LastName LIKE 'search' THEN LastName ELSE NULL END 
, CASE WHEN Zip LIKE 'search' THEN Zip ELSE NULL END 

이것은 물론 'search'은 쿼리에 전달하는 내용으로 LIKE 연산자의 의미있는 매개 변수 인 메타 문자 (예 : 메타 문자 있음, 형식이 제대로 지정된 식)를 가정합니다.

+0

이것은 훌륭하게 작동합니다! 감사! 이제 성을 주문하고 이름을 주문하고 싶지만 쉼표를 붙이면 부서집니다. 거기에 두 가지 방법을 가르쳐 주시겠습니까? CASE는 LIKE '검색'THEN END는 우편, \t \t \t \t CASE를 압축 언제 언제 성 LIKE '검색'THEN 성 ELSE 성 END 당신은 다음과 같이 문자열을 연결하는 연결을 사용할 수 있습니다 @Jordan – Joey

+1

:'성 || ','|| 이름. – dasblinkenlight

0
SELECT firstName, lastName, zip From Users 
WHERE (FirstName LIKE '%search%' OR LastName LIKE '%search%' OR Zip LIKE '%search%') 
ORDER BY LastName, FirstName 

가능하면 LIKE를 =로 바꾸십시오. 그것은 쿼리의 속도를 향상시킵니다. 어쨌든 if-else 블록을 사용하지 않으시겠습니까?

의사 코드 :

if (input = name){ 
    SELECT firstName, lastName, zip From Users 
    WHERE (FirstName LIKE '%search%' OR LastName LIKE '%search%') 
    ORDER BY LastName, FirstName 
} 
else if (input = zipcode) { 
    SELECT firstName, lastName, zip From Users 
    WHERE Zip LIKE '%search%' 
    ORDER BY zip 
} 
관련 문제