我想写一份报告,但我的问题不大。我的问题是:
SELECT a.Tanggal,a.IdMesin,a.PartID,b.PartName,
SUM(a.QtyPlanning) AS Plan,SUM(IF (a.HasilProduksi <> 'Good', a.QtyProduksi, 0)) AS NG,
SUM(IF (a.HasilProduksi = 'Good', a.QtyProduksi, 0)) AS OK
FROM
trans_lhpdthp a
INNER JOIN ms_partcategory b on b.PartID=a.PartID
WHERE a.Tanggal BETWEEN '2018-01-09' AND '2018-01-12'
GROUP BY a.PartID,a.IdMesin
ORDER BY b.PartName
结果是这样的:
|Tanggal |IdMesin |PartID|PartName|Plan |NG |OK |
|------- |------ |------|--------|-----|---|----|
|2018-01-09|BS 120 A|BLXX |BOTTOM |5000 |500|4500|
|2018-01-09|BS 120 B|ACLA |CLAMP |5000 |600|4400|
|2018-01-12|BS 260 E|SMXX |RIGHT |1200 |0 |1200|
我想要这样的结果:
|Tanggal |IdMesin |PartID|PartName|Plan |NG |OK |
|------- |------ |------|--------|-----|---|----|
|2018-01-09|BS 120 A|BLXX |BOTTOM |5000 |500|4500|
|2018-01-09|BS 120 B|ACLA |CLAMP |5000 |600|4400|
|2018-01-10| | | |0 |0 |0 |
|2018-01-11| | | |0 |0 |0 |
|2018-01-12|BS 260 E|SMXX |RIGHT |1200 |0 |1200|
你能帮帮我吗,任何帮助都会很感激的。
2条答案
按热度按时间r1wp621o1#
您会注意到,内部连接与左连接的问题导致了您的问题。当b中没有数据时,内部连接将不显示a中的记录。但是left join会带来来自a的记录,即使b中没有相关记录。
下面的方法应该有效。
lh80um4z2#
实现目标有两种方法
partid上有一个内部连接,如果有帮助的话,可以尝试使用自然连接。但是,即使是自然连接或交叉连接也可能返回所有可能的组合,因此一旦获得结果,可以使用where子句再次对其进行筛选。
另一种方法是使用嵌套子查询而不是联接,并且在where子句中也包含具有空值的party id。