我使用HP Vertica 7作为数据仓库数据库。
我需要同时更新两个表。
foreach (row r in table_1)
{
foreach (row r2 in table_2)
{
if(r.key1 == r2.key1 && r.key2 ==r2.key2 && r.soldQuantity > r2.Quantity)
{
updateRowInT1(); //r.Partner = r2.Partner;
updateRowInT2(); //r2.Quantity = r2.Quantity - r.soldQuantity;
break;
}
}
}
这段代码最能说明我需要做什么。 有没有办法在SQL中执行此操作(使用用户定义的函数)。 由于第二个表格中的更改,我无法使用更新和加入。或者我可以?
此外,这是Pentaho Kettle完成的ETL过程的一部分。或许可以在这个工具中做到这一点。?
由于
修改 我已经更改了上面的代码。
我需要达到什么目标?
合作伙伴的定期销售。
现在有什么不对?
当零售店出售某些SKU时,我可以看到SKU LAST Partner。但是,我工作的公司是从更多的合作伙伴处购买相同的SKU。 慢慢改变尺寸不适用,因为当我们在SKU上切换合作伙伴时,货架上仍有一定数量的SKU。
假设:
FIFO - 先进先出。
因此,对于初始匹配,我需要比较(按日期顺序)销售和购买以及减少购买数量。
答案 0 :(得分:1)
你可能应该以更加面向集合的方式思考。
假设我理解你正在尝试做什么,我会在两个更新语句中执行此操作:
-- Update table_1's Partner based on a row in table_2.
UPDATE table_1 r
SET Partner = r2.Partner
FROM table_2 r2
WHERE r2.key1 = r.key1
AND r2.key2 = r.key2;
-- Reduce the Quantity in table_2 based on table_1's soldQuantity
UPDATE table_2 r2
SET Quantity = r2.Quantity - r.soldQuantity
FROM table_1 r
WHERE r.key1 = r2.key1
AND r.key2 = r2.key2
AND r2.Quantity >= r.soldQuantity;
-- Both of these should be done in a transaction so it is all or none. Commit the work.
COMMIT;
您可以看到SQLFiddle here。