【发布时间】:2014-01-01 09:45:07
【问题描述】:
这是基于我前几天得到的一些代码(感谢彼得姆)。我现在正在尝试在查询计算后选择前 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,其中包含我尝试使用它的数据的小样本。
【问题讨论】:
-
我正在处理的数据库在 Access 2013 中
-
当您删除 (x) 并将其替换为 SELECT TOP 10 ... 中所需的数字时会发生什么?或选择 TOP 10 PERCENT ...?
-
就个人而言,每当我需要翻译的值超过一两个时,我都会指定一个表(作为临时表或通过 CTE)。这大大简化了查询,尤其是当您必须嵌套括号时...
-
我可以建议使用
switch函数而不是iif来处理多个条件。 -
感谢 Yawar 的建议,它看起来可能是一个更好的解决方案,但我在尝试时似乎遇到了语法错误。这是链接sqlfiddle.com/#!3/a726c/41
标签: sql ms-access ms-access-2013