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