我在sql表中有以下数据
Temp表变量@RndQuesnCount包含这个数据,
Recid conceptID MinDisplayCount 1 3839 2 2 4802 3
问题表:QuesTable
QuesCompID Ques_ConceptDtlID 88 4802 89 4802 90 4802 91 4802 92 4802 93 4802
我想显示的是对于概念id在@RndQuesnCount中的问题的最小显示数,所以现在的数据应该如下
QuesCompID Ques_ConceptDtlID 88 4802 89 4802 90 4802
因为conceptID(4802)在@RndQuesnCount表中具有最小显示数3.
任何人都可以帮我解决这个问题吗?
解决方法
我想,使用ROW_NUMBER()和一个join可以获得结果.数据设置:
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,(90,(91,(92,(93,4802)
查询:
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
结果:
rn QuesCompID Ques_ConceptDtlID -------------------- ----------- ----------------- 1 88 4802 2 89 4802 3 90 4802