2011-02-11 3 views
1

값이 1 인 특정 필드와 값이 2 인 행, 값이 0 인 모든 다른 행을 선택해야하는 상당히 간단한 작업이 있습니다.UNION - TSQL을 사용하여 사용자 지정 결과 순서

어떤 항목이 어떤 범주에 속해 있는지 얻기 위해 조인을 사용했습니다. 나는 올바른 순서로 결과를 결합 할 것이다 조합을 사용하여 3 선택을 수행하고 있다고 생각하지만, 나는 다음과 같이

내 SQL입니다 :) 잘못 :

SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany 
ON tblcompany.idcompany = tblcompanycategory.idcompany 
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 1 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany 
ON tblcompany.idcompany = tblcompanycategory.idcompany 
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 2 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany 
ON tblcompany.idcompany = tblcompanycategory.idcompany 
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 0 

내 결과와 함께 주문 나오지 않습니다 1, 2, 0 .. 내가 여기서 뭐하는거야?

* 해결책 * 도움 주셔서 감사합니다. 아래는 내가 사용하고있는 최종 SQL이다.

SELECT * FROM tblcompanycategory 
    INNER JOIN tblcompany 
    ON tblcompany.idcompany = tblcompanycategory.idcompany 
    WHERE tblcompanycategory.idcategory = @category 
    ORDER BY CASE tblcompany.intpremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END 

답변

2

좋은 집합 연산자와 마찬가지로 UNION 문은 데이터를 정렬 할 때 불가지론 자입니다.

... ORDER BY CASE tblCompany.IntPremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END 
0

당신과 함께, 세 개의 SELECT 문에 열을 추가해야합니다 :

할 수있는 일, 그러나, 같은 문에 의해 신중하게 조작 된 ORDER 하나의 SELECT 문을 실행 결과를 "범주화"하는 리터럴 값입니다. 그런 다음 해당 열을 기준으로 주문하십시오.

1

union 절에서 select 문의 순서에 따라 정렬이 수행되지 않습니다. 가장 간단한 방법은 다음과 같이 주문을 추가하는 것입니다.

SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany 
ON tblcompany.idcompany = tblcompanycategory.idcompany 
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 1 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany 
ON tblcompany.idcompany = tblcompanycategory.idcompany 
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 2 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany 
ON tblcompany.idcompany = tblcompanycategory.idcompany 
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 0 

ORDER BY CASE intpremium WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 0 THEN 3 END