2013-10-18 11 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)