Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 从嵌套查询更新MS Access表_Sql_Ms Access_Nested - Fatal编程技术网

Sql 从嵌套查询更新MS Access表

Sql 从嵌套查询更新MS Access表,sql,ms-access,nested,Sql,Ms Access,Nested,我的SQL非常生锈。我正试图以嵌套查询的形式,从同一个表中更新具有计数(*)的表中行中的计数器。SQL语句如下所示: UPDATE DWInvoiceHeader AS A SET A.InvCount = (Select Count(B.HIINV) From DWInvoiceHeader AS B WHERE (B.HIVENT = '0') Group By B.HIINV

我的SQL非常生锈。我正试图以嵌套查询的形式,从同一个表中更新具有计数(*)的表中行中的计数器。SQL语句如下所示:

UPDATE DWInvoiceHeader AS A
SET A.InvCount = (Select Count(B.HIINV) From DWInvoiceHeader AS B 
                  WHERE (B.HIVENT = '0') 
                  Group By B.HIINV 
                  Order By B.HIINV)
WHERE (A.HIVENT = '0');
这些行看起来像:

HIINV1.......Seq1.....InvCount   - want InvCount to be 3
HIINV1.......Seq2.....InvCount   - want InvCount to be 3
HIINV1.......Seq3.....InvCount   - want InvCount to be 3
HIINV2.......Seq1.....InvCount   - want InvCount to be 2 
HIINV2.......Seq2.....Invcount   - want InvCount to be 2
.
.
.
HIINVn.......Seq1.....InvCount   - want InvCount to be 1
上面的SQL给了我消息“操作必须是可更新的查询”


有什么想法吗?

您可以使用域函数Dcount,方法类似于:

UPDATE DWInvoiceHeader AS A
SET A.InvCount = 
(
    Select Count(B.HIINV) 
        From DWInvoiceHeader AS B 
        WHERE (B.HIVENT = '0') AND (A.HIINV = B.HIINV)
        Group By B.HIINV 
)
WHERE (A.HIVENT = '0');
UPDATE test
SET InvCount = Dcount("HIVENT","test","[HIVENT]='0'")
如果您想使用通用方法,那么我建议将计数存储在工作表中,然后更新加入工作表的表

    Select B.HIINV,Count(B.HIINV) as InvCount 
    into WorkingTbl
    From DWInvoiceHeader AS B 
    WHERE (B.HIVENT = '0') AND (A.HIINV = B.HIINV)
    Group By B.HIINV 

   Update   DWInvoiceHeader  A 
   Inner Join WorkingTbl b 
   on a.HIINV=b.HIINV 
   Set A.InvCount=b.InvCount

您可以使用域函数Dcount的方式类似于:

UPDATE test
SET InvCount = Dcount("HIVENT","test","[HIVENT]='0'")
如果您想使用通用方法,那么我建议将计数存储在工作表中,然后更新加入工作表的表

    Select B.HIINV,Count(B.HIINV) as InvCount 
    into WorkingTbl
    From DWInvoiceHeader AS B 
    WHERE (B.HIVENT = '0') AND (A.HIINV = B.HIINV)
    Group By B.HIINV 

   Update   DWInvoiceHeader  A 
   Inner Join WorkingTbl b 
   on a.HIINV=b.HIINV 
   Set A.InvCount=b.InvCount

尝试了这个包含中间表的两部分解决方案,效果很好。DCOUNT函数代码给出了一条“缺少运算符”消息。DCOUNT应该是这样的:DCOUNT(“HIINV”、“dwingVoiceHeader”、“B.HIVENT='0')和(a.HIINV=B.HIINV)”),但一般来说:提示:已优化了Count函数以加快查询中记录的计数。在查询表达式中使用Count函数而不是DCount函数,并设置可选条件以对结果实施任何限制。当您必须从代码模块或宏或计算控件中对域中的记录进行计数时,请使用DCount函数。请重试编辑过的DCount函数,并查看它是否有效。请将此包含中间表的两部分解决方案量化,并且效果良好。DCOUNT函数代码给出了一条“缺少运算符”消息。DCOUNT应该是这样的:DCOUNT(“HIINV”、“dwingVoiceHeader”、“B.HIVENT='0')和(a.HIINV=B.HIINV)”),但一般来说:提示:已优化了Count函数以加快查询中记录的计数。在查询表达式中使用Count函数而不是DCount函数,并设置可选条件以对结果实施任何限制。当您必须从代码模块或宏或计算控件中对域中的记录进行计数时,请使用DCount函数。请重试编辑的DCount函数,看看它是否有效please@RawleRamkeesoon,这不是您请求的嵌套查询吗?上述解决方案是否给出了所需的结果集?上述解决方案是否导致错误?@RawleRamkeesoon,这不是您请求的嵌套查询吗?上述解决方案是否给出了所需的结果集?上述解决方案是否导致错误?