表名texcel
字段:mat_code mat_name, mat_amout, add_time
值: 002 石灰 1212 20110308003834
003 铁水 1333 20110308023834
002 石灰 1555 20110308103834
003 铁水 1777 20110308173834
002 石灰 1888 20110308193834
004 铝块 2123 20110308223834现在我根据add_time的时间段来区分了三个班组,甲,乙,丙
他们的时间段分别是'甲',时刻段是 '20110308000000' ~ '20110308075959'
'乙', 时刻段是 '20110308080000' ~ '20110308155959'
'丙',时刻段是 '20110308160000' ~ '20110308235959' ;
然后我想根据三个班组来计算每个班组每个mat_name的mat_amout,该怎么些SQL啊?
(以下是我写的,为什么不对诶?)
SELECT
(case when add_time between :v_add_time_beg AND :v_add_time_beg_end then v_prod_shift_group END) v_prod_shift_group,
(case when add_time between :v_add_time_mid AND :v_add_time_mid_end then v_prod_shift_group END) v_prod_shift_group,
(case when add_time between :v_add_time_end AND :v_add_time_end_end then v_prod_shift_group END) v_prod_shift_group,
mat_code, mat_name,sum(mat_amount)
FROM texcel
WHERE add_time > :v_add_time_beg
AND add_time < :v_add_time_end_end
GROUP BY v_prod_shift_group,mat_code, mat_name;
字段:mat_code mat_name, mat_amout, add_time
值: 002 石灰 1212 20110308003834
003 铁水 1333 20110308023834
002 石灰 1555 20110308103834
003 铁水 1777 20110308173834
002 石灰 1888 20110308193834
004 铝块 2123 20110308223834现在我根据add_time的时间段来区分了三个班组,甲,乙,丙
他们的时间段分别是'甲',时刻段是 '20110308000000' ~ '20110308075959'
'乙', 时刻段是 '20110308080000' ~ '20110308155959'
'丙',时刻段是 '20110308160000' ~ '20110308235959' ;
然后我想根据三个班组来计算每个班组每个mat_name的mat_amout,该怎么些SQL啊?
(以下是我写的,为什么不对诶?)
SELECT
(case when add_time between :v_add_time_beg AND :v_add_time_beg_end then v_prod_shift_group END) v_prod_shift_group,
(case when add_time between :v_add_time_mid AND :v_add_time_mid_end then v_prod_shift_group END) v_prod_shift_group,
(case when add_time between :v_add_time_end AND :v_add_time_end_end then v_prod_shift_group END) v_prod_shift_group,
mat_code, mat_name,sum(mat_amount)
FROM texcel
WHERE add_time > :v_add_time_beg
AND add_time < :v_add_time_end_end
GROUP BY v_prod_shift_group,mat_code, mat_name;
解决方案 »
- alter database register注册归档日志后,做recover恢复时还是提示旧日志的路径。
- timestamp 如何更新数据
- ORA-01767: UPDATE ...SET 表达式必须是子查询 怎么解决这个错误
- 一个sql语句..
- 小菜鸟 求教下面这句语句是什么意思?
- 求一个sql语句!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 奇怪了,这样子怎么不让我排序呢?总报缺少右括号
- oracle导出错误
- 输出问题
- ORA-38729: 执行 FLASHBACK 的闪回数据库日志数据不足
- 如何获得存储过程最近一次的编译时间和编译者的ip地址或者机器名?
- 删除一个DBA权限的用户后,用system用户也登陆不了。救命!
SQL>
SQL> with texcel as
2 (
3 select '002' mat_code,'石灰' mat_name,1212 mat_amount,20110308003834 add_time from dual union all
4 select '003' mat_code,'铁水' mat_name,1333 mat_amount,20110308023834 add_time from dual union all
5 select '002' mat_code,'石灰' mat_name,1555 mat_amount,20110308103834 add_time from dual union all
6 select '003' mat_code,'铁水' mat_name,1777 mat_amount,20110308173834 add_time from dual union all
7 select '002' mat_code,'石灰' mat_name,1888 mat_amount,20110308193834 add_time from dual union all
8 select '004' mat_code,'铝块' mat_name,2123 mat_amount,20110308223834 add_time from dual
9 )
10 select groupname, mat_name, sum(mat_amount)
11 from (select t.*,
12 case
13 when add_time between 20110308000000 and 20110308075959 then
14 '甲'
15 when add_time between 20110308080000 and 20110308155959 then
16 '乙'
17 when add_time between 20110308160000 and 20110308235959 then
18 '丙'
19 else
20 null
21 end groupname
22 from texcel t)
23 group by groupname, mat_name
24 ;GROUPNAME MAT_NAME SUM(MAT_AMOUNT)
--------- -------- ---------------
丙 石灰 1888
甲 铁水 1333
丙 铁水 1777
丙 铝块 2123
甲 石灰 1212
乙 石灰 15556 rows selectedSQL>
加上sum和else 0看看