Wpis z mikrobloga

Mam takie query:
SELECT tochar(dstamp, 'HH24') as HOUR, SUM(updateqty) as totalreceipt
FROM inventory
transaction
WHERE dstamp BETWEEN todate ('28/05/2021 18:00:00', 'dd/mm/yyyy hh24:mi:ss') AND
to
date('29/05/2021 06:00:00', 'dd/mm/yyyy hh24:mi:ss')
AND code = 'Receipt'
GROUP BY tochar(dstamp, 'HH24')
ORDER BY HOUR ASC ;

I teraz muszę dodać do tego drugą kolumnę, która bęzie mi pokazywałą total
putaway, czyli to samo query, tylko code = 'Putaway', reszta pozostaje bez zmian.
Ma ktoś jakiś pomysł jak to połączyć? Próbowałem już joinami, ale zawsze coś nie pasuje.
Query grupuje mi wyniki godzinowo, czyli będę miał 12 wierszy.

#oracle #sql
  • 3
  • Odpowiedz
@cycu9696: w PostgreSQL użyłbym FILTER, czyli
SELECT ... SUM(updateqty) FILTER WHERE code = 'Receipt', SUM(updateqty) FILTER WHERE code = 'Putaway',
(jeżeli dobrze zrozumiałem)
edit: sory, widzę że w Oracle tego nie ma
  • Odpowiedz
@nunczako
+ Jakby ktoś kiedyś potrzebował to tutaj rozwiązanie:
SELECT tochar(dstamp, 'HH24') as HOUR,
SUM(CASE WHEN code = 'Receipt' THEN update
qty END) as totalreceived,
SUM(CASE WHEN code = 'Putaway' THEN update
qty END) as totalputaway
FROM inventory
transaction
WHERE dstamp BETWEEN todate('28/05/2021 18:00:00', 'dd/mm/yyyy hh24:mi:ss') AND
to
date('29/05/2021 06:00:00', 'dd/mm/yyyy hh24:mi:ss')
GROUP BY to_char(dstamp, 'HH24')
ORDER BY HOUR ASC
  • Odpowiedz