Отображение всех дат, если нет данных

0

Я хочу сделать отчет, но у меня возникают проблемы с моим запросом. Вот мой запрос:

    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 ответа

0

Вы заметили бы, что проблема INNER JOIN vs LEFT JOIN вызывает вашу проблему. Когда данных нет, b INNER JOIN не будет отображать записи из a. Но LEFT JOIN будет записывать записи даже если у вас нет связанных записей в 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
  • 0
    это дает тот же результат
  • 1
    Вы должны показать свои образцы данных для дальнейшего исследования
Показать ещё 5 комментариев
0

Вы можете достичь двух целей:

  1. у вас есть INNER JOIN на PartID, вы можете попробовать с естественным соединением, если оно помогает. Но даже естественное или кросс-соединение может вернуть все возможные комбинации, поэтому, как только вы получите результат, вы сможете снова отфильтровать его, используя предложение where.
  2. Другим способом сделать это будет использование вложенных подзапросов вместо соединений, а внутри вашего предложения where включить идентификатор партии с нулевыми значениями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню