3

表看起来像这样:(是的,这些是&标志。忽略破折号)

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在某处发表声明,但我不确定如何。

4

1 回答 1

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
于 2013-08-09T02:57:29.450 回答