Saya memiliki tabel master / detail dan ingin memperbarui beberapa nilai ringkasan di tabel master terhadap tabel detail. Saya tahu saya bisa memperbaruinya seperti ini:
update MasterTbl set TotalX = (select sum(X) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
update MasterTbl set TotalY = (select sum(Y) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
update MasterTbl set TotalZ = (select sum(Z) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
Tetapi, saya ingin melakukannya dalam satu pernyataan, seperti ini:
update MasterTbl set TotalX = sum(DetailTbl.X), TotalY = sum(DetailTbl.Y), TotalZ = sum(DetailTbl.Z)
from DetailTbl
where DetailTbl.MasterID = MasterTbl.ID group by MasterID
tetapi itu tidak berhasil. Saya juga telah mencoba versi yang menghilangkan klausa "group by". Saya tidak yakin apakah saya terbentur dengan batasan database khusus saya (Advantage), atau batasan SQL saya. Mungkin yang terakhir. Adakah yang bisa membantu?
Coba ini:
Update MasterTbl Set
TotalX = Sum(D.X),
TotalY = Sum(D.Y),
TotalZ = Sum(D.Z)
From MasterTbl M Join DetailTbl D
On D.MasterID = M.MasterID
Tergantung pada database yang Anda gunakan, jika itu tidak berhasil, maka cobalah ini (ini adalah SQL non-standar tetapi legal di SQL Server):
Update M Set
TotalX = Sum(D.X),
TotalY = Sum(D.Y),
TotalZ = Sum(D.Z)
From MasterTbl M Join DetailTbl D
On D.MasterID = M.MasterID
Mengapa Anda melakukan grup dengan pada pernyataan pembaruan? Apakah Anda yakin itu bukan bagian yang menyebabkan kueri gagal? Coba ini:
update
MasterTbl
set
TotalX = Sum(DetailTbl.X),
TotalY = Sum(DetailTbl.Y),
TotalZ = Sum(DetailTbl.Z)
from
DetailTbl
where
DetailTbl.MasterID = MasterID
Sudahkah Anda mencoba dengan sub-kueri untuk setiap bidang:
UPDATE
MasterTbl
SET
TotalX = (SELECT SUM(X) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID),
TotalY = (SELECT SUM(Y) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID),
TotalZ = (SELECT SUM(Z) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
WHERE
....