MS Access - 删除runningtotal(子查询输出)<100的记录

问题描述 投票:0回答:2

我需要删除运行总计<100且[Product Line]包含“Electronics”的记录。

下面是Table Data,这里RunningTotal不是表中的原始字段,它是子查询(inner query)输出。

ID    Product Line           Qty     RunningTotal
1     Electronics            15            15   
2     R.K. Electricals       20            20
3     Samsung Electronics    10            25
4     Electricals            30            50
5     Electricals            45            95
6     Electronics Components 18            43
7     Electricals            25           120
8     Electronics            50            93
9     Electricals Machines   65           185
10    Electronics            15           108
11    ABC Electronics Ltd    52           160
12    Electricals            15           200

我使用以下查询来过滤记录,其中[Product Line]包含“Electronics”并且运行总数<100。

select t.*, q.runningtotal from salesdata t inner join
(
    select t.id, 
        (
            select sum(u.qty) 
            from salesdata u 
            where u.[product line] like "*Electronics*" and u.id <= t.id
        ) as runningtotal
    from salesdata t
) q on t.id = q.id
where q.runningtotal < 100 and t.[product line] like "*Electronics*"

我将匹配的记录(基于上面的查询)复制到另一个正在运行的表中。复制后,我需要删除匹配的记录([Product Line]包含“Electronics”和runningtotal <100)。我写下面的查询,它抛出错误无法从指定的表中删除而无法正常工作

delete from (
select t.*, q.runningtotal from salesdata t inner join
(
    select t.id, 
        (
            select sum(u.qty) 
            from salesdata u 
            where u.[product line] like "*Electronics*" and u.id <= t.id
        ) as runningtotal
    from salesdata t
) q on t.id = q.id
where q.runningtotal < 100 and t.[product line] like "*Electronics*")

非常感谢您的帮助,提前致谢。

sql ms-access ms-access-2010 access ms-access-2013
2个回答
1
投票

你可以试试:

delete from salesdata sd
    where sd2.[product line] like "*Electronics*" and
          (select sum(sd2.qty)
           from salesdata as sd2
           where sd2.[product line] like "*Electronics*" and
                 sd2.id < sd.id
          ) < 100;

0
投票

在MS Access中,DELETE必须指定一个表而不是查询。假设您保存了SELECT查询(您应该为引擎编译最佳执行计划),请考虑带子查询的EXISTS子句。

delete from salesdata s
where exists (select 1 from mysavedquery mq where s.id = mq.id)
© www.soinside.com 2019 - 2024. All rights reserved.