2013-12-09 73 views
0

我在查询时遇到了问题,我想在重复时插入和更新,但它表示“无效的组功能使用”。插入重复密钥更新时出现“无法使用组功能”更新

我运行了我唯一的“选择”语句,没有像“无效的组功能使用”这样的问题。

这里是我的全码:

INSERT INTO tbl_biir_aktual(cabang_kode, periode_thn, periode_bln, pending_pp_volume, pending_pp_value) 
SELECT a.cabang_kode, YEAR(a.tanggal) AS tahun, MONTH(a.tanggal)AS bulan, 
    SUM(a.qty_pending*a.unit_barang)AS tonase_pending, SUM(a.value_pending)AS value_pending 
FROM tbl_order a, 
    (SELECT b.cabang_kode, MAX(b.tanggal)tanggal 
    FROM tbl_order b 
    GROUP BY b.cabang_kode, YEAR(b.tanggal), MONTH(b.tanggal)) AS max_cabang 
WHERE max_cabang.cabang_kode = a.cabang_kode AND max_cabang.tanggal = a.tanggal 
GROUP BY cabang_kode, YEAR(tanggal), MONTH(tanggal) 
ON DUPLICATE KEY 
UPDATE pending_pp_volume = SUM(a.qty_pending*a.unit_barang), pending_pp_value = SUM(a.value_pending); 

好, 嘿,我刚刚发现这个MySQL ON DUPLICATE KEY UPDATE while inserting a result set from a query

INSERT INTO tbl_biir_aktual(cabang_kode, periode_thn, periode_bln, pending_pp_volume, pending_pp_value) 
SELECT a.cabang_kode, YEAR(a.tanggal) AS tahun, MONTH(a.tanggal)AS bulan, 
    @tonase_pending := SUM(a.qty_pending*a.unit_barang)AS tonase_pending, @value_pending := SUM(a.value_pending)AS value_pending 
FROM tbl_order a, 
    (SELECT b.cabang_kode, MAX(b.tanggal)tanggal 
    FROM tbl_order b 
    GROUP BY b.cabang_kode, YEAR(b.tanggal), MONTH(b.tanggal)) AS max_cabang 
WHERE max_cabang.cabang_kode = a.cabang_kode AND max_cabang.tanggal = a.tanggal 
GROUP BY cabang_kode, YEAR(tanggal), MONTH(tanggal) 
ON DUPLICATE KEY 
UPDATE pending_pp_volume = @tonase_pending, pending_pp_value = @value_pending; 

我已经试过了,它的完成。 Tq的Edper的评论反正....

+0

好,您找到了解决方案。是的,变量应该这样做! – Edper

回答

0

尝试使用别名在您的更新:

UPDATE SET pending_pp_volume = tonase_pending, pending_pp_value = value_pending 

而且它更明智的做法是使用另一种名称为您的别名,你总不是使用相同的名称您现有的字段名称,如value_pending。不妨将它更改为TotalValuePending,以便它会:

UPDATE SET pending_pp_volume = tonase_pending, pending_pp_value = TotalValuePending 
+0

@Agata检查我的更新。 – Edper

+0

Tq,但我也试过,它说'未知列'tonase_pending'在'字段列表'“它解决了组proublem,但它无法找到我的”SUM(别名字段)a.qty_pending * a.unit_barang )AS tonase_pending“ – Agata

+0

感谢您帮助我编辑了我的帖子,现在全部完成。你只需要使用“@”我想这样@tonase_pending – Agata