尝试让SELECT TOP在ACCESS中使用Parameter

时间:2014-01-01 09:45:07

标签: sql ms-access ms-access-2013

这是基于我前几天得到的一些代码(感谢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,其中包含我尝试使用它的一小部分数据。

2 个答案:

答案 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是有限制的。