这里有一个问题是我要做的事情的基本要点:
将多行中的值相加为一行
然而,据我所知,我正在寻求进一步的功能,这将永久性地修改有问题的表,使其看起来像在另一个线程中建议的select语句的结果。
所以这张table:
Sales
--------------------------------------
account product qty amount
--------------------------------------
01010 bottle 10 200
01010 bottle 20 100
01010 bottle 5 10
11111 can 50 200
11111 can 25 150
…会被永久修改成这样
Sales
--------------------------------------
account product qty amount
--------------------------------------
01010 bottle 35 310
11111 can 75 350
正如链接中所回答的,使用select with sum和group by可以显示表需要的外观,但是如何将这些更改实际应用到sales表?
编辑:每次向系统中添加新的销售批次时,都将运行此查询。它的目的是在添加新记录后清理sales表。
替代方法
sales中的新记录是从另一个表插入的,如下所示:
"INSERT INTO sales
SELECT account, product, qty, amount
FROM new_sales;"
如果有办法在上一次插入期间处理求和,而不是首先添加重复的行,那也是可以接受的。请记住,对于sales中没有重复行的新记录,仍然需要使用此解决方案。
编辑:为子孙后代
一般的回答似乎是,我最初的方法是不可能的——除了创建一个带有create和select的temp\u sales表,然后完全清除sales,然后将temp\u sales的内容复制到清除的sales表中,并截断temp\u sales以备将来使用。
公认的解决方案使用了我也提到过的“替代方法”。
4条答案
按热度按时间prdp8dxp1#
旧table
twh00eeo2#
可以从select语句创建表。
所以你可以这样做:
这将创建一个具有正确结构的表,并插入您想要的记录。当然,您可以调整查询或表名。
sbtkgmzw3#
此查询执行etl工具可以执行的操作,但您需要运行整个脚本:
oxcyiej74#
假设新的销售在销售更新后被截断,然后开始重新充值,您可以使用insert..on duplicate key..update例如