我需要删除运行总计<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*")
非常感谢您的帮助,提前致谢。
你可以试试:
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;
在MS Access中,DELETE
必须指定一个表而不是查询。假设您保存了SELECT
查询(您应该为引擎编译最佳执行计划),请考虑带子查询的EXISTS
子句。
delete from salesdata s
where exists (select 1 from mysavedquery mq where s.id = mq.id)