Rav*_*dag 10 sql sql-server-2008
我在SQL表中有以下数据
临时表变量@RndQuesnCount包含此数据,
Recid conceptID MinDisplayCount
1 3839 2
2 4802 3
Run Code Online (Sandbox Code Playgroud)
问题表: QuesTable
QuesCompID Ques_ConceptDtlID
88 4802
89 4802
90 4802
91 4802
92 4802
93 4802
Run Code Online (Sandbox Code Playgroud)
我想要显示的是问题的最小显示计数,即@RndQuesnCount概念ID,所以现在数据应如下所示
QuesCompID Ques_ConceptDtlID
88 4802
89 4802
90 4802
Run Code Online (Sandbox Code Playgroud)
因为conceptid(4802)@RndQuesnCount表中的最小显示计数为3 .
任何人都可以帮我解决这个问题吗?
ROW_NUMBER()我认为,简单地使用和连接可以获得结果.数据设置:
declare @RndQuesnCount table (recid int,conceptid int,mindisplaycount int)
insert into @RndQuesnCount(Recid,conceptID,MinDisplayCount) values
(1, 3839, 2),
(2, 4802, 3)
declare @QuesTable table (QuesCompID int,Ques_ConceptDtlID int)
insert into @QuesTable(QuesCompID,Ques_ConceptDtlID) values
(88, 4802),
(89, 4802),
(90, 4802),
(91, 4802),
(92, 4802),
(93, 4802)
Run Code Online (Sandbox Code Playgroud)
查询:
select
t.rn,
t.QuesCompID,
t.Ques_ConceptDtlID
from
@RndQuesnCount rqc
inner join
(select *,ROW_NUMBER() OVER (PARTITION BY Ques_ConceptDtlID ORDER BY QuesCompID) rn from @QuesTable) t
on
rqc.conceptID = t.Ques_ConceptDtlID and
rqc.MinDisplayCount >= t.rn
Run Code Online (Sandbox Code Playgroud)
结果:
rn QuesCompID Ques_ConceptDtlID
-------------------- ----------- -----------------
1 88 4802
2 89 4802
3 90 4802
Run Code Online (Sandbox Code Playgroud)