Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在ACCESS 2013中使用SELECT MAX更新查询_Sql_Ms Access - Fatal编程技术网

Sql 在ACCESS 2013中使用SELECT MAX更新查询

Sql 在ACCESS 2013中使用SELECT MAX更新查询,sql,ms-access,Sql,Ms Access,我在Access 2013中有以下两个表 **tbl_GroupInvoices** CustomerName | CountryCode | Group | UsageRate | SelectedTier | ------------ | ----------- | ----- | --------- | ------------ | CUST1 | FR | GROUP1 | | 0

我在Access 2013中有以下两个表

**tbl_GroupInvoices**
CustomerName  |  CountryCode  |  Group  |  UsageRate  |  SelectedTier  |
------------  |  -----------  |  -----  |  ---------  |  ------------  |
CUST1         |  FR           |  GROUP1 |             |     0          |
CUST1         |  FR           |  GROUP2 |     8.40%   |     0          |
CUST1         |  FR           |  GROUP3 |    47.91%   |     0          |
CUST1         |  FR           |  GROUP4 |    89.53%   |     0          |
CUST1         |  FR           |  GROUP5 |    45.34%   |     0          |

tbl_GenericTiers
CustomerName  |  CountryCode  |  TierName  |  UsageRate
------------  |  -----------  |  --------  |  ---------  |
CUST1         |  FR           |  GROUP1    |  20         |
CUST1         |  FR           |  GROUP1    |  40         |
CUST1         |  FR           |  GROUP1    |  60         |
CUST1         |  FR           |  GROUP1    |  80         |
CUST1         |  FR           |  GROUP2    |  20         |
CUST1         |  FR           |  GROUP2    |  40         |
CUST1         |  FR           |  GROUP2    |  60         |
CUST1         |  FR           |  GROUP2    |  80         |
我需要从tbl_GenericTiers确定表tbl_GroupInvoices上选择的层, 通过查看tbl_GroupInvoices中的组的实际使用率并选择层,了解已选择层 包含使用率的

e、 g。 如果使用率=45.6% 我为集团定义了两层:

1:40% 1,60% 我需要选择第40层%

如果使用率为64.3%,则我选择60%层

我的SQL查询如下所示:

UPDATE tbl_GroupInvoices
SET tbl_GroupInvoices.SelectedTier = TmpTable.MaxUsageRate
FROM (
      SELECT MAX(tbl_GenericTiers.UsageRate) AS MaxUsageRate
      FROM tbl_GroupInvoices,  tbl_GenericTiers
      WHERE  tbl_GroupInvoices.CustomerName = tbl_GenericTiers.CustomerName
      AND tbl_GroupInvoices.CountryCode = tbl_GenericTiers.CountryCode
      AND tbl_GroupInvoices.[Group] = tbl_GenericTiers.TierName
      AND tbl_GroupInvoices.UsageRate >= tbl_GenericTiers.UsageRate) AS TmpTable
我一直收到以下错误消息:

Syntax error (missing operator) in query expression 'TmpTable.MaxUsageRate
FROM (
      SELECT MAX(tbl_GenericTiers.UsageRate) AS MaxUsageRate
      FROM tbl_GroupInvoices,  tbl_GenericTiers
      WHERE  tbl_GroupInvoices.CustomerName = tbl_GenericTiers.CustomerName
      AND tbl_GroupInvoices.CountryCode = tbl_GenericTiers.CountryCode
      AND tbl_GroupInvoices.[Group] = tbl_GenericTiers.TierName
      AND tbl_GroupInvoices.UsageRate >= tbl_GenericTiers.UsageRate) AS TmpTable'
试试这个:

UPDATE tbl_GroupInvoices
SET tbl_GroupInvoices.SelectedTier = (
      SELECT MAX(tbl_GenericTiers.UsageRate) AS MaxUsageRate
      FROM tbl_GroupInvoices,  tbl_GenericTiers
      WHERE  tbl_GroupInvoices.CustomerName = tbl_GenericTiers.CustomerName
      AND tbl_GroupInvoices.CountryCode = tbl_GenericTiers.CountryCode
      AND tbl_GroupInvoices.[Group] = tbl_GenericTiers.TierName
      AND tbl_GroupInvoices.UsageRate >=UsageRate);
不同的是,我没有将嵌套的SELECT语句放在FROM中。相反,我把它放在平等的另一边。我认为这是正确的,因为我在这里在线找到了嵌套SELECT语句的示例:。这就是一个具体的例子:

SELECT Orders.CustomerID, Orders.OrderDate, 
    (SELECT MAX(OrderDate) 
     FROM Orders AS Orders1 
     WHERE Orders1.OrderDate < Orders.OrderDate 
     AND Orders1.CustomerID = Orders.CustomerID) 
               AS PreviousOrderDate, 
[OrderDate]-[PreviousOrderDate] AS OrderInterval
FROM Orders
ORDER BY Orders.CustomerID, Orders.OrderDate DESC;

按照这种结构,我可以将您的查询保存在我的access数据库中,这意味着没有语法错误,因此应该可以正常工作。现在的问题只是结果和您希望查询返回的内容。

我很确定您不能在更新查询中使用聚合函数,请尝试使用未经完全测试的域聚合:

UPDATE tbl_GroupInvoices GI INNER JOIN tbl_GenericTiers GT ON GI.CustomerName = GT.CustomerName AND
                                                              GI.CountryCode = GT.CountryCode AND
                                                              GI.[Group] = GT.TierName AND
                                                              GI.UsageRate = GT.UsageRate
SET     GI.SelectedTier = DMAX("UsageRate", "tbl_GenericTiers", "CustomerName = '" & GI.CustomerName & "' AND
                                                                CountryCode = '" & GI.CountryCode & "' AND 
                                                                TierName = '" & GI.[Group] & "'")

编辑:在Access中设置值之前,首先列出表联接-基本上是没有SELECT字段或FROM语句的查询。编写一个普通的SELECT查询,删除FROM之前的所有内容,并将FROM更改为UPDATE。

非常感谢。看起来还可以,但我仍然收到“操作必须使用可更新的查询”消息。