2013-10-18 3 views
0
나는 다음과 같은 쿼리를 사용하고

반환SQL-사용 CASE는 첫 번째 경우 값

SELECT Policy_type_ID,Policy_Value Value,CASE Policy_Value WHEN max(Policy_Value) THEN 'Highest' WHEN min(Policy_Value) THEN 'Lowest' END AS Range 
FROM Policy_Types 
GROUP BY Policy_type_ID,Policy_Value 
HAVING ((Policy_Value IN (SELECT max(Policy_Value) 
FROM Policy_Types)) OR (Policy_Value IN(SELECT min(Policy_Value) 
FROM Policy_Types))); 

을하지만 결과는 'Range'.Its 만에 관한 열에서 하나 개의 값을'최고 '가 첫 번째 경우는 어쨌든간에 나머지는 무시합니다.

Policy_type_ID Value Range 
501180   990000 Highest 
690002   10  Highest 
690006   10  Highest 
690007   10  Highest 

어디서 잘못 가고 있는지 잘 모르겠습니다. 문제가되는 CASE 문 .... 어떤 도움 ??

+0

그것은 감각을 사용하지 않습니다 'MAX (Policy_Value)'때'가 각 그룹의 최대 계산 이후 Policy_Value', 당신은에 의해 그룹화하고있는 열 중 하나입니다. 각 그룹 내에서 값은 항상 최대 값과 같습니다. – Barmar

+0

이 정책 값을 전체 테이블의 최대 값과 비교하려고합니까? – Barmar

답변

0

MINMAX 함수가 전체 테이블이 아닌 GROUP BY 그룹 내에서 계산되는 것이 문제입니다. GROUP BY이없는 별도의 하위 쿼리에서 계산해야합니다.

SELECT DISTINCT Policy_type_ID, Policy_Value, 
     CASE Policy_Value 
     WHEN MaxPolicy THEN 'Highest' 
     ELSE 'Lowest' 
     END Range 
FROM Policy_Types 
JOIN (SELECT MIN(Policy_Value) MinPolicy, MAX(Policy_Value) MaxPolicy) MinMax 
HAVING Policy_Value IN (MinPolicy, MaxPolicy)