Select TOP 1 在 ex-aequo 的情况下没有 return 值

Select TOP 1 doesnt return value in case of ex-aequo

这是 link 我的数据。

我有这个查询:

SELECT *
FROM tbl c
WHERE C.dep = (select top 1 dep
                       from tbl cc
                       where cc.yea = c.yea
                       and cc.mon = mon
                       group by mon, yea, dep, n
                       order by n desc)
        OR C.dep =(     select top 1 dep
                                from tbl cc
                                where cc.yea = c.yea
                                and cc.mon = mon
                                group by mon, yea, dep, n
                                order by n asc 
                                )
ORDER BY yea, mon, n

每个 (month,year) 最好的(最低的 n)和最差的(最高的 n)dep return。此查询适用于第 1、2、4、5、7 个月,不适用于第 3、6 个月。唯一的区别是,在第 3 种和第 6 种情况下,我得到了两个分数相同的 del (1)。我怎样才能 return 其中之一,而不是什么都不 return。

这是我的输出:

n           yea        mon        dep
----------- ----------- ----------- ----------
1           2017        1           50
48          2017        1           36
58          2017        2           36
85          2017        3           36
1           2017        4           50
39          2017        4           36
1           2017        5           50
39          2017        5           36
19          2017        6           36
3           2017        7           50
17          2017        7           36

这就是我的预期:

n           yea.        mon         dep
----------- ----------- ----------- ----------
1           2017        1           50
48          2017        1           36
58          2017        2           36
85          2017        3           36
1           2017        3           49 (or 67)
1           2017        4           50
39          2017        4           36
1           2017        5           50
39          2017        5           36
1           2017        6           50 (or 13)
19          2017        6           36
3           2017        7           50
17          2017        7           36

使用row_number():

select t.*
from (select t.*,
             row_number() over (partition by yea, mon order by n asc) as seqnum_asc,
             row_number() over (partition by yea, mon order by n desc) as seqnum_desc
      from tbl t
     ) t
where 1 in (seqnum_asc, seqnum_desc);