You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中根据重复ID返回对应次数的重复记录?

实现SQL Server按指定重复次数返回查询结果

原查询中IN子句会自动去重,所以重复的playerid只会返回一次。要实现按指定次数返回对应记录,需要把包含重复playerid的列表转换成带重复行的数据集,再与players表关联,具体方法如下:

方法一:用VALUES构造临时行集(适合较短列表)

直接把需要的playerid按重复次数写成多行的临时数据集,再和players表做内连接:

select p.playerid, p.fullname
from players p
inner join (
    values (123), (123), (1234), (1234), (1234)
) as t(playerid) on p.playerid = t.playerid

这样就能得到123返回2次、1234返回3次的结果。

方法二:处理超长playerID列表

如果你的playerid列表非常长,建议先把列表导入到临时表或表变量中,再进行关联:

  1. 创建临时表并导入数据:
-- 创建临时表
create table #TempPlayerIDs (playerid int)

-- 导入所有需要的playerid(包括重复项)
insert into #TempPlayerIDs (playerid)
values (123), (123), (1234), (1234), (1234)
-- 更多重复的playerid可继续添加
  1. 关联查询:
select p.playerid, p.fullname
from players p
inner join #TempPlayerIDs t on p.playerid = t.playerid

方法三:使用表值参数(适合应用程序传入长列表)

如果是从应用程序传入长列表,可以定义表值参数,直接传入包含重复项的数据集:

  1. 先创建表值类型:
create type PlayerIDList as table (playerid int)
  1. 在查询中使用:
declare @ids PlayerIDList
insert into @ids (playerid)
values (123), (123), (1234), (1234), (1234)

select p.playerid, p.fullname
from players p
inner join @ids t on p.playerid = t.playerid

以上几种方法都能保留playerid的重复次数,返回符合要求的结果。

内容的提问来源于stack exchange,提问作者Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:53:18