需要获取按批次代码分组的产品代码的每小时计数

时间:2018-02-21 08:41:18

标签: sql oracle

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;

但是这个查询并没有给我提供所需的输出。

1 个答案:

答案 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');

Demo