如何在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列表非常长,建议先把列表导入到临时表或表变量中,再进行关联:
- 创建临时表并导入数据:
-- 创建临时表 create table #TempPlayerIDs (playerid int) -- 导入所有需要的playerid(包括重复项) insert into #TempPlayerIDs (playerid) values (123), (123), (1234), (1234), (1234) -- 更多重复的playerid可继续添加
- 关联查询:
select p.playerid, p.fullname from players p inner join #TempPlayerIDs t on p.playerid = t.playerid
方法三:使用表值参数(适合应用程序传入长列表)
如果是从应用程序传入长列表,可以定义表值参数,直接传入包含重复项的数据集:
- 先创建表值类型:
create type PlayerIDList as table (playerid int)
- 在查询中使用:
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
相关产品推荐
相关产品推荐

