am尝试执行此查询。这就是我所拥有的。
我的桌子是:桌子
QId InternalId type. priority userid
100 100 1 0 X101
100 100 1 1 X102
100 100 2 0 X103
100 100 2 0 X104
100 100 2 0 X105
100 100 3 0 X106
100 100 3 0 X107
101 101 2 1 X114
101 101 2 0 X115
101 101 3 0 X116
101 101 3 0 X117
对于QId和InternalId,我们输入1,2,3。对于每个基于组的类型,我需要1行。这里的条件是,如果优先级为1,那么我们需要获取该记录。如果未设置优先级,则需要优先记录。
我需要下表所示的结果
QId InternalId type. priority userid
100 100 1 1 X102
100 100 2 0 X103
100 100 3 0 x106
101 101 2 1 X114
101 101 3 0 X116
你能帮我这个忙吗
答案 0 :(得分:1)
只需使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by QId, InternalId, type order by (select null)) as seqnum
from t
) t
where seqnum = 1;
答案 1 :(得分:1)
您可以尝试使用row_number()
select * from
(
select *, row_number() over(partition by qid, internalid, type order by priority desc) as rn
from tablename
)A where rn=1
答案 2 :(得分:0)
使用row_number()
窗口功能
select t.* from (select *,row_number()over(partition by QId,InternalId,type order by case when priority=1 then 1 else 2 end) rn
) where t.rn=1
答案 3 :(得分:0)
另一种方法可以是WITH TIES
,如下所示。
select top 1 with ties *
from @table
order by row_number() over (partition by QId, InternalId, type order by (select 1))