在我的系统中计算传入材料和使用材料后,如果有人想要进行调整,则会有一个调整项目。
QUERY Incoming Material - 材料的使用
select (select sum(jumlah) from warehouse where tgl_invoice >= '2013-03-17' AND tgl_invoice <='2013-03;18' and kode=a.kode) - COALESCE((select sum(jumlah) from use_material where tanggal >= '2013-03-17' AND tanggal <='2013-03;18' and kode_barang=a.kode),0) total, a.kode, a.nama from warehouse a group by a.kode;
+-------+---------+------------+ | total | kode | nama | +-------+---------+------------+ | 4 | ACLG001 | AC LG 1 pk | | 160 | P001 | Spindle | | 30 | S012 | Cable | +-------+---------+------------+
mysql> select * from adjusment;
结果:
+----+-------------+-------------+--------+--------+------------+---------------+ | id | kode_barang | nama_barang | status | jumlah | tanggal | user | +----+-------------+-------------+--------+--------+------------+---------------+ | 7 | P001 | Spindle | + | 10 | 2013-03-30 | Administrator | | 8 | P001 | Spindle | - | 5 | 2013-03-30 | Administrator | | 9 | S012 | Cable | + | 0 | 2013-03-30 | Administrator | +----+-------------+-------------+--------+--------+------------+---------------+
我已经计算了
select(select sum(jumlah) from adjusment where status='+') - (select sum(jumlah) from adjusment where status='-') as total,kode_barang,nama_barang from adjusment group by kode_barang;
+-------+-------------+-------------+ | total | kode_barang | nama_barang | +-------+-------------+-------------+ | 5 | P001 | Spindle | | 5 | S012 | Cable | +-------+-------------+-------------+
我对最后一只股票的查询是这样的:
select (select sum(jumlah) from warehouse where tgl_invoice >= '2013-03-17' AND tgl_invoice <='2013-03;18' and kode=a.kode) - (select sum(jumlah) from use_material where tanggal >= '2013-03-17' AND tanggal <='2013-03:18' and kode_barang=a.kode) + COALESCE((select sum(jumlah) from adjusment where status='+' and kode_barang=a.kode),0) - COALESCE((select sum(jumlah) from adjusment where status='-' and kode_barang=a.kode),0) as total,a.kode,a.nama from warehouse a group by a.kode;
+-------+---------+------------+ | total | kode | nama | +-------+---------+------------+ | NULL | ACLG001 | AC LG 1 pk | | 165 | P001 | Spindle | | 30 | S012 | Cable | +-------+---------+------------+
结果应为Cable = 35 和AC LG 1 PK = 4。
出了什么问题?
答案 0 :(得分:0)
格式化后似乎更容易:
SELECT wh.total + COALESCE(adj.total,0) AS total, wh.kode, wh.nama FROM (
SELECT(
SELECT SUM(jumlah) FROM warehouse
WHERE tgl_invoice >= '2013-03-17' AND tgl_invoice <='2013-03;18' AND kode = a.kode
) - COALESCE(
(SELECT SUM(jumlah) FROM use_material
WHERE tanggal >= '2013-03-17' AND tanggal <='2013-03;18' AND kode_barang = a.kode),
0
) AS total,
a.kode, a.nama FROM warehouse AS a
GROUP BY a.kode
) AS wh
LEFT JOIN
(
SELECT(
SELECT SUM(jumlah) FROM adjusment
WHERE status = '+'
) - (
SELECT SUM(jumlah) FROM adjusment
WHERE status = '-'
) AS total, kode_barang, nama_barang FROM adjusment
GROUP BY kode_barang
) AS adj
ON wh.kode = adj.kode_barang