如果没有数据,则显示所有日期

fwzugrvs  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(392)

我想写一份报告,但我的问题不大。我的问题是:

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|

你能帮帮我吗,任何帮助都会很感激的。

r1wp621o

r1wp621o1#

您会注意到,内部连接与左连接的问题导致了您的问题。当b中没有数据时,内部连接将不显示a中的记录。但是left join会带来来自a的记录,即使b中没有相关记录。
下面的方法应该有效。

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
LEFT 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
lh80um4z

lh80um4z2#

实现目标有两种方法
partid上有一个内部连接,如果有帮助的话,可以尝试使用自然连接。但是,即使是自然连接或交叉连接也可能返回所有可能的组合,因此一旦获得结果,可以使用where子句再次对其进行筛选。
另一种方法是使用嵌套子查询而不是联接,并且在where子句中也包含具有空值的party id。

相关问题