WITH updated_data AS (
SELECT
"id",
packing_num,
(packing_num - (SELECT COUNT(1) FROM wms_shipment_material_code_item_qr WHERE item_id =
wms_shipment_material_code_item."id" AND status = 1)) as new_packing_left
FROM wms_shipment_material_code_item
)
UPDATE wms_shipment_material_code_item t
SET
packing_left = u.new_packing_left,
status = CASE WHEN u.new_packing_left = 0 THEN 2 WHEN u.new_packing_left=u.packing_num THEN 0 ELSE 1 END
FROM updated_data u
WHERE t."id" = u."id" and t."id" IN
#{id}