2017-07-06 150 views
0

我有一个设置表正在存储使用Microsoft Access构建的应用程序的不同设置键 其中一个设置键驱动器应该在下拉列表中看到多少条记录 列表后面的查询类似于下一个:Microsoft Access查询

Select Top 3 id, name FROM tblRegular 

现在,我要实现的是这样的:

Select Top (Select keyValue FROM tblSettings WHERE key="rowNumber") id, name FROM tblRegular 

但是,使用像这样因为它触发的错误不工作 有人能告诉我,如果 可以做到?

编辑:表结构类似于下面的一个: tblRegular:

id | name 
1  'A' 
2  'B' 
3  'C' 

tblSettings:

id | key   | keyValue 
1  'rowNumber' 2 

谢谢!

+0

示例数据和期望的结果将会非常有帮助。 –

+0

在MS Access中,您不能从2个不同的表中选择“顶部”值,它们之间没有任何关系。 –

+1

@GordonLinoff我认为OP需要一个动态的“TOP”值,可能来自另一个查询。可以在SQL Server中使用,但不确定有关Access。 –

回答

0

这句法也无法在访问SQL,在“选择”与像(定位)消息狂叫:

的SELECT句子包含保留字或参数,那就是 拼写错误或丢失,或者标点符号不正确。

0

好的,所以,刚刚发现使用Select语句,因为它是在问题中会引发错误提及。所以,这工作的方法是改变的形式负载下拉的.RowSource和查询放在行来源应该是这样的:

Select Top (" & rowNr & ") id, name FROM tblRegular 

其中rowNr是牵强使用另一个SQL查询,甚至一个DAO/ADO函数来从数据库中检索的值

+1

你应该提到你正在使用编码语言,即VBA来构建一个SQL即时查询并且不使用纯SQL。 – Parfait

1

使用相关子查询,以计算rowCount时,其随后在外部查询使用的行数来过滤考虑纯SQL溶液:

SELECT main.id, main.[name] 
FROM 
    (SELECT t.id, t.[name], 
      (SELECT Count(*) FROM tblRegular sub 
      WHERE sub.[name] <= t.[name]) AS rowCount 
    FROM tblRegular t) AS main 
WHERE main.rowCount <= (SELECT Max(s.keyValue) FROM tblSettings s 
         WHERE s.key = 'rowNumber') 

或者使用域聚合,DMax()

SELECT main.id, main.[name] 
FROM 
    (SELECT t.id, t.[name], 
      (SELECT Count(*) FROM tblRegular sub 
      WHERE sub.[name] <= t.[name]) AS rowCount 
    FROM tblRegular t) AS main 
WHERE main.rowCount <= DMax("keyValue", "tblSettings", "key = 'rowNumber'")