Tsql 选择“总和”,然后将其用作“选择顶部”的参数

Tsql 选择“总和”,然后将其用作“选择顶部”的参数,tsql,sql-server-2005,Tsql,Sql Server 2005,我希望在一个SQL命令中包含这两个SQL语句。帮助: 报表1: SELECT SUM(nrofitems) as totItems FROM tblSets WHERE moduleexamID = 20 报表2: SELECT TOP (cast(totItems as int)) questions FROM tblQuestions WHERE moduleexamID = 20 ORDER BY NEWID() 就用吧 大概是这样的: SELECT * FROM ( SELE

我希望在一个SQL命令中包含这两个SQL语句。帮助:

报表1:

SELECT SUM(nrofitems) as totItems 
FROM tblSets 
WHERE moduleexamID = 20
报表2:

SELECT TOP (cast(totItems as int)) questions
FROM tblQuestions 
WHERE moduleexamID = 20 
ORDER BY NEWID()
就用吧

大概是这样的:

SELECT * FROM
(
SELECT tblQuestions.*,
       ROW_NUMBER() OVER (ORDER BY NEWID()) as RN
FROM tblQuestions 
WHERE moduleexamID = 20 
) as T1
WHERE RN<=
        ISNULL(
        (SELECT SUM(nrofitems) as totItems 
                FROM tblSets 
                WHERE moduleexamID = 20
        ),0);

您也可以尝试以下方法:

;WITH a AS (
    SELECT moduleexamID, SUM(nrofitems) as totItems 
    FROM tblSets 
    GROUP BY moduleexamID
)
SELECT b.questions
FROM a
    CROSS APPLY (
        SELECT TOP (cast(a.totItems as int)) questions
        FROM tblQuestions 
        WHERE moduleexamID = a.moduleexamID
        ORDER BY CHECKSUM(NEWID())
    ) b
WHERE a.moduleexamID = 20

SQL Server的哪个版本?按NEWID排序是什么意思?是否随机排序?第一次查询的结果总是一行,从中选择TOP是什么意思?啊,我的大脑要崩溃了,先生。我需要对表tblSets中的项目总数进行求和,然后我需要使用求和来选择tblQuestions中的问题项目总数。。差不多吧。所选问题应按随机顺序排列。能否提供tblSets和TBLQUESTIES的模式?;使用cnt ASSELECT SUMnrofitems AS totItems FROM tblSets,其中moduleexamID=20选择TOPcnt.totItems FROM tblQuestions交叉连接cnt,其中moduleexamID=20 ORDER BY NEWID我使用了CTE,但它不起作用。因为RN@Damien_The_Unbeliever:你说得对,在这种情况下没有必要,但我认为这是明确的。
create table #tblSets (
    moduleexamID int,
    moduleId int,
    nrofitems int
)
go
create table #tblQuestions (
    moduleexamID int,
    body varchar(1024)
)
go
insert into #tblQuestions values
    (20,'aaaaaa'),
    (20,'bbbbbb'),
    (20,'cccccc'),
    (20,'dddddd'),
    (21,'eeeeee'),
    (21,'ffffff'),
    (20,'gggggg')
go
insert into #tblSets values
    (20,1,1),
    (20,2,2),
    (21,1,1),
    (22,1,3)
go
select top (
    select sum(s.nrofitems)
    from #tblSets s
    where s.moduleexamID=20
) *, newid() as id
from #tblQuestions q
where q.moduleexamID=20
order by id
go