0

我正在使用以下查询:

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)));

但是结果在“范围”列中只有一个值“最高”。它只针对第一种情况,无论它可能是什么,而忽略其余的。

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

我不知道我哪里出错了。只是那个 CASE 语句就是问题所在....有什么帮助吗?

4

1 回答 1

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)
于 2013-10-18T04:28:07.843 回答