SELECT TOP N带变量

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 .

任何人都可以帮我解决这个问题吗?

Dam*_*ver 8

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)