Tôi tin rằng tôi có thể tối ưu hóa câu lệnh sql này bằng cách sử dụng một tuyên bố trường hợp cho các Kết nối bên ngoài Trái.Câu lệnh SQL tối ưu hóa Trường hợp
Nhưng tôi đã gặp khó khăn trong việc thiết lập các trường hợp, một để tổng hợp các loại mã AB, CD và một cho tất cả các phần còn lại.
Đánh giá cao bất kỳ trợ giúp hoặc mẹo nào bạn có thể cho tôi về điều này.
update billing set payments = isnull(bd1.amount, payments)
, payments = case
when payments is null then 0
else payments
end
, charges = case
when bd2.amount is not null then charges
when charges is null then 0
else charges
end
, balance = round(charges + isnull(bd1.amount, bi.payments), 2)
from billing bi
left outer join (select inv, round(sum(bd1.bal), 2) amount
from "bill" bd1
where code_type = 'AB'
or code_type = 'CD'
group by inv) bd1
on bd1.inv = bi.inv
left outer join (select invoice, round(sum(bd2.bal), 2) amount
from "bill" bd2
where code_type <> 'AB'
and code_type <> 'CD'
group by inv) bd2
on bd2.inv = bi.inv;
Điều này có hợp lệ không? Dường như bạn đang cập nhật cột 'thanh toán' hai lần. –
@Siva Tôi đang sử dụng Advantage 9 – Trevor