这是基于我前几天得到的一些代码(感谢peterm)。我现在试图在查询计算后选择TOP X数量的结果。 X的范围从1到8,具体取决于每位玩家的结果数量。
这是我的代码,但是当我尝试运行它时出现语法错误。
SELECT
PlayerID
, RoundID
, PlayedTo
, (SELECT Count(PlayerID) FROM PlayedToCalcs) AS C
, iif(
C <= 6
, 1
, iif(
C <= 8
, 2
, (
iif(
C <= 10
, 3
, (
iif(
C <= 12
, 4
, (
iif(
C <= 14
, 5
, (
iif(
C <= 16
, 6
, (
iif(
C <= 18
, 7
, (iif(C <= 20, 8, 999))
)
)
)
)
)
)
)
)
)
)
)
) AS X
FROM PlayedToCalcs AS s
WHERE PlayedTo IN (
SELECT TOP (X) PlayedTo
FROM PlayedToCalcs
WHERE PlayerID = s.PlayerID
ORDER BY PlayedTo DESC, RoundID DESC
)
ORDER BY PlayerID, PlayedTo DESC, RoundID DESC;
这是一个链接http://sqlfiddle.com/#!3/a726c/4,其中包含我尝试使用它的一小部分数据。
答案 0 :(得分:2)
Access数据库引擎不允许您使用SELECT TOP
的参数。您必须在SQL语句中包含文字值。
例如,此查询可以正常工作。
SELECT TOP 2 *
FROM tblFoo
ORDER BY id DESC;
但是尝试替换参数 how_many 会触发错误3141,“SELECT语句包含拼写错误或缺失的保留字或参数名称,或者标点符号不正确。 “
SELECT TOP how_many *
FROM tblFoo
ORDER BY id DESC;
答案 1 :(得分:0)
原因在于SQL Server(您在SQL Fiddle中使用的模拟器),您无法使用IIF
。尝试使用CASE
。
在Access中使用7个嵌套IIF
是有限制的。