我看到了一些近似的答案,但我无法将它们放入我的场景中。更新使用WITH CLAUSE
我在PL/SQL(的Oracle 11g)如下: (编辑:我清理SQL一点使它右)
WITH t AS
(
SELECT case_nbr,
type_cd,
subtype_cd,
class_nbr,
case_dt,
SUM(fhits) fhits_sum,
COUNT(fhits) hit_count
FROM DDEL.MYCASE
GROUP BY case_nbr,
type_cd,
subtype_cd,
class_nbr,
case_dt
)
SELECT ROUND(mc.fhits/t.fhits_sum * mc.qty) new_qty , t.*, mc.fhits, mc.qty
FROM t
JOIN DDEL.MYCASE mc
ON t.case_nbr = mc.case_nbr
AND t.type_cd = mc.type_cd
AND t.subtype_cd = mc.subtype_cd
AND t.class_nbr = mc.class_nbr
AND t.case_dt = mc.case_dt
WHERE t.fhits_sum > 1000
AND t.hit_count > 1
);
结果给我(我只是编号无关列,使其更适合):
new_qty 1 2 3 4 5 6 fhits qty
57 10 E S 8 01-DEC-15 133 2 999 77
20 10 E S 8 01-DEC-15 133 2 934 77
这找工作......但是,我想要做的就是更新该查询在这种情况下,结果...两个记录。我想用new_qty(你会看到57和20)修改mc.qty列(你看77的地方)。
我很难得到一个更新使用WITH子句和这个结果集。我想我必须做更复杂的事情,但希望有人可以在这里看到一个简单的方法来添加更新。请记住,查询正在查找一组具有大量数据的不同记录,这些记录匹配的次数不止一次,并且符合以下条件:一起使fhits列的总和超过1000的值...只有那么我想要做到这一点。
我刚刚在这最后一天半的时间里看了太久,我错过了一些明显的东西。感谢您的帮助
感谢那些运作良好。至于Distinct和Outer Join,你是对的......它通过多次交换我的代码试图让它与更新一起工作。在发布之前,我应该清理它。如果有人想要使用那里的什么,我会将其修正为其他人 – Mark