Tsql 选择“总和”,然后将其用作“选择顶部”的参数
我希望在一个SQL命令中包含这两个SQL语句。帮助: 报表1: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
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