MY_TABLE
----------------------------------------------------------------
| date_time | batch_code_1 | batch_code_2 | prod_code |
----------------------------------------------------------------
| 2018/02/15 0:15:11 | X55 | D78 | 100 200 |
----------------------------------------------------------------
| 2018/02/15 0:18:11 | D78 | | 200 |
----------------------------------------------------------------
| 2018/02/15 1:12:11 | X55 | | 100 |
----------------------------------------------------------------
| 2018/02/15 1:21:11 | X55 | D78 | 100 200 |
----------------------------------------------------------------
| 2018/02/15 1:56:11 | X55 | D78 | 100 200 |
----------------------------------------------------------------
| 2018/02/15 1:56:11 | D78 | | 200 |
----------------------------------------------------------------
需要按批次代码分组产品代码。
预期输出
--------------------------------------------
| ON_HOUR | BATCH_CODE | TOTAL_COUNT |
--------------------------------------------
| 2018/02/15 00 | D78 | 2 |
--------------------------------------------
| 2018/02/15 01 | D78 | 3 |
--------------------------------------------
使用
进行查询SELECT to_char(tab.date_time, 'YYYY-MM-DD HH24') AS on_hour,
tab.batch_code_1 AS batch_code_1,
tab.batch_code_2 AS batch_code_2,
COUNT(*) AS total_count
FROM my_table tab
WHERE date_time BETWEEN to_date('20180220000000', 'yyyymmddhh24miss') AND to_date('20180220235959', 'yyyymmddhh24miss')
AND prod_code LIKE '%200%'
AND (batch_code_1 = 'D78' OR batch_code_2 = 'D78')
GROUP BY to_char(tab.date_time, 'YYYY-MM-DD HH24'),
tab.batch_code_1,
tab.batch_code_2
ORDER BY to_char(tab.date_time, 'YYYY-MM-DD HH24') ASC;
但是这个查询并没有给我提供所需的输出。
答案 0 :(得分:0)
我认为你预期产出的诀窍是考虑:
nvl(tab.batch_code_2,batch_code_1) = 'D78'
并将您的查询设为:
SELECT to_char(tab.date_time, 'YYYY-MM-DD HH24') on_hour,
nvl(tab.batch_code_2,batch_code_1) batch_code,
COUNT(1) total_count
FROM my_table tab
WHERE prod_code LIKE '%200%'
AND nvl(tab.batch_code_2,batch_code_1) = 'D78'
GROUP BY to_char(tab.date_time, 'YYYY-MM-DD HH24'), nvl(tab.batch_code_2,batch_code_1)
ORDER BY to_char(tab.date_time, 'YYYY-MM-DD HH24');