[英]SQL-using CASE in SELECT returns only first case value
我正在使用以下查询:
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语句。
问题是您的MIN
和MAX
函数是在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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.