表看起来像这样:(是的那些是&
符号。忽略破折号)
ID-VALUE-NUM
-1-YES----2-
-1-NO-----3-
-2-YES----1-
-2-NO-----1-
-3-&&&----1-
-3-&------2-
-3-&&-----2-
我需要做什么:
对于每个ID
,我需要获得最高NUM
的值,如果是平局且VALUE
有&
s,那么它会选择最短的。如果值为YES/NO
,则会选择YES
。
期望的结果
ID-VALUE-NUM
-1-NO-----3-
-2-YES----1-
-3-&------2-
我想我必须在那里放一个IF
声明,但我不确定如何。
答案 0 :(得分:2)
这是一种方法。联接找到最大num
。然后select
使用逻辑根据您的规则选择正确的值:
select t.id,
(case when count(*) = 1 then min(value)
when max(value like '%&%') > 0 then min(value)
when max(value = 'Yes') > 0 and max(value = 'No') > 0 then 'Yes'
else max(value)
end) as value,
t.num
from t join
(select id, max(num) as maxnum
from t
group by id
) tm
on t.id = tm.id and t.num = tm.maxnum
group by t.id, t.num