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

Sql 需要获得按批次代码分组的每小时产品代码计数,sql,oracle,Sql,Oracle,我的桌子 需要获取按批次代码分组的每小时产品代码计数 预期产出 -------------------------------------------- | ON_HOUR | BATCH_CODE | TOTAL_COUNT | -------------------------------------------- | 2018/02/15 00 | D78 | 2 | --------------------------------------

我的桌子

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

预期产出

--------------------------------------------
| 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;

但是这个查询并没有给我期望的输出。

我认为实现期望输出的诀窍在于考虑:

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

是否有类似NVL的函数可以使用两个以上的参数?就像我可能有批处理代码1、批处理代码2……批处理代码n一样。@Sushovon据我所知,你的意思是可以用于多变量的
decode
函数。
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');