一个数据表EntryNum中,有这样三个字段
Productcode 产品类型
num 数量
createdate 入库时间
productcode num createdate
A 4 2005-10-25 03:00:00
A 3 2005-10-25 09:19:00
B 1 2005-10-25 01:10:00
B 3 2005-10-25 20:00:00
A 1 2005-10-25 21:00:00
C 3 2005-10-25 10:12:00
A 2 2005-10-25 15:30:00
... ... ........(早班为00:00--08:00,中班为08:00--16:00,夜班为16:00--24:00),上面列出2005-10-25日的产量怎样统计成这样的格式:产品类型 早班 中班 夜班 总计
A 4 5 1 10
B 1 0 3 4
C 0 3 0 3
... ... ... ... ... 总计 5 8 4 17
Productcode 产品类型
num 数量
createdate 入库时间
productcode num createdate
A 4 2005-10-25 03:00:00
A 3 2005-10-25 09:19:00
B 1 2005-10-25 01:10:00
B 3 2005-10-25 20:00:00
A 1 2005-10-25 21:00:00
C 3 2005-10-25 10:12:00
A 2 2005-10-25 15:30:00
... ... ........(早班为00:00--08:00,中班为08:00--16:00,夜班为16:00--24:00),上面列出2005-10-25日的产量怎样统计成这样的格式:产品类型 早班 中班 夜班 总计
A 4 5 1 10
B 1 0 3 4
C 0 3 0 3
... ... ... ... ... 总计 5 8 4 17
解决方案 »
- 请问:oracle中xmlparser包和DBMS_xmlparser包有何区别?
- 一个非常难优化的sql,,,向高手们求解!!!!!!!!!!!!!!!!!
- pl/sql能和用户交互吗?
- 100分求助一个sql语句(oracle数据库)
- 简单的sql语句?
- 大哥門幫幫忙啊﹐給點提示
- 刚才看了一条SQL,不懂,{TS '2004-02-01 00:00:00'} 是什么意思?
- 存储过程中如何使用字符连接?
- ora-01008错误!在线等!!
- powerdesigner用reort导出文档,列显示为true/false,如何设置true的显示为“X”
- 请教SQL
- oracle 客户端连接时通时不通 在线求救
sum(case when abs(mod(createdate-to_date('2005-10-25', 'yyyy-mm-dd'), 1))<0.333333333
then num else 0 end) "早班",
sum(case when abs(mod(createdate-to_date('2005-10-25', 'yyyy-mm-dd'), 1))>0.333333333
and abs(mod(createdate-to_date('2005-10-25', 'yyyy-mm-dd'), 1))<0.666666667
then num else 0 end) "中班",
sum(case when abs(mod(createdate-to_date('2005-10-25', 'yyyy-mm-dd'), 1))>0.666666667
then num else 0 end) "夜班"
sum(num) "总计"
from EntryNum
group by name
createdate>=to_date('2005.10.25 00','yyyy.mm.dd HH24') and
createdate<to_date('2005.10.25 08','yyyy.mm.dd HH24')
是不是性能比较差??
2 sum(case when createdate BETWEEN DATE '2005-10-25' AND DATE '2005-10-25' + 1/3
3 then num else 0 end) "早班",
4 sum(case WHEN createdate BETWEEN DATE '2005-10-25' + 1/3 AND DATE '2005-10-25' + 2/3
5 then num else 0 end) "中班",
6 sum(case when createdate BETWEEN DATE '2005-10-25' + 2/3 AND DATE '2005-10-25' + 1
7 then num else 0 end) "夜班",
8 sum(num) "总计"
9 from test2
10 group by rollup(Productcode)
11 /DECODE(GROUPING(PRODUCTCODE),1 早班 中班 夜班 总计
------------------------------ ---------- ---------- ---------- ----------
4 5 1 10
1 0 3 4
0 3 0 3
总计 5 8 4 17
select productcode,
sum(case when createdate BETWEEN DATE '2005-10-25' AND DATE '2005-10-25' + 1/3
then num else 0 end) "早班",
sum(case WHEN createdate BETWEEN DATE '2005-10-25' + 1/3 AND DATE '2005-10-25' + 2/3
then num else 0 end) "中班",
sum(case when createdate BETWEEN DATE '2005-10-25' + 2/3 AND DATE '2005-10-25' + 1
then num else 0 end) "夜班",
sum(case when createdate BETWEEN DATE '2005-10-25' AND DATE '2005-10-25' + 1
then num else 0 end) "总计"
from EntryNum
group by Productcode
UNION
select '总计',
sum(case when createdate BETWEEN DATE '2005-10-25' AND DATE '2005-10-25' + 1/3
then num else 0 end) "早班",
sum(case WHEN createdate BETWEEN DATE '2005-10-25' + 1/3 AND DATE '2005-10-25' + 2/3
then num else 0 end) "中班",
sum(case when createdate BETWEEN DATE '2005-10-25' + 2/3 AND DATE '2005-10-25' + 1
then num else 0 end) "夜班",
sum(case when createdate BETWEEN DATE '2005-10-25' AND DATE '2005-10-25' + 1
then num else 0 end) "总计"
from EntryNum
order by productcode这样基本满足要求了,
另外,领导在这个表中新添了一个销售类型,分为进出 出口两种类型能否查询设计成这样:销售类型 产品类型 早班 中班 夜班 总计
出口 A 4 5 1 10
C 0 3 0 3
内销 B 1 0 3 4
... ... ... ... ... 总计 5 8 4 17
2 sum(case when createdate BETWEEN DATE '2005-10-25' AND DATE '2005-10-25' + 1/3
3 then num else 0 end) "早班",
4 sum(case WHEN createdate BETWEEN DATE '2005-10-25' + 1/3 AND DATE '2005-10-25' + 2/3
5 then num else 0 end) "中班",
6 sum(case when createdate BETWEEN DATE '2005-10-25' + 2/3 AND DATE '2005-10-25' + 1
7 then num else 0 end) "夜班",
8 sum(num) "总计"
9 from test2
10 group by CUBE(Productcode)
11 /DECODE(GROUPING(PRODUCTCODE),1 早班 中班 夜班 总计
------------------------------ ---------- ---------- ---------- ----------
总计 5 8 4 17
a 4 5 1 10
b 1 0 3 4
c 0 3 0 3