请问oracle高手 SQL语句该如何修改,怎么写。急!!!
后台为ORACEL数据库:
select A.SORDER,A.KOTECD,A.JSTSTM,A.JSTETM,B.WAREHUSFG,B.WAREETM,
from factv2.SAGPLNFL A,FACTV2.SGPROGSS B
Where B.WAREHUSFG=1(1为入库标志)
AND A.SORDER=B.SORDER
ORDER BY A.SORDER
(说明:SORDER为表单号 KOTECD为工序号 JSTSTM为工序开始时间,JSTETM为工序结束时间。WAREHUSFG入库状态,WAREETM入库时间)
得到以下数据:
SORDER KOTECED JSTSTM JSTETM WAREHUSFG WAREETM
0310341010152008-12-31 13:58:002008-12-31 13:58:001 2009-01-06 06:15:00
0310341020152008-12-31 13:58:002008-12-31 13:58:001 2009-01-06 06:15:00
0310341020252008-12-31 18:36:002008-12-31 20:40:001 2009-01-06 06:15:00
0310341020262008-12-31 20:44:002008-12-31 20:45:001 2009-01-06 06:15:00
0310341020302008-12-31 23:29:002008-12-31 23:29:001 2009-01-06 06:15:00
0310341020362009-01-01 05:32:002009-01-01 07:23:001 2009-01-06 06:15:00
0310341020402009-01-02 15:04:002009-01-02 15:04:001 2009-01-06 06:15:00
0310341020542009-01-02 23:02:002009-01-02 23:02:001 2009-01-06 06:15:00
0310341020702009-01-03 04:55:002009-01-03 04:55:001 2009-01-06 06:15:00
0310341020752009-01-03 05:28:002009-01-03 05:28:001 2009-01-06 06:15:00
0310341020802009-01-03 15:08:002009-01-03 15:08:001 2009-01-06 06:15:00
0310341020902009-01-05 05:53:002009-01-05 05:53:001 2009-01-06 06:15:00
0310341020952009-01-05 06:15:002009-01-05 06:15:001 2009-01-06 06:15:00
031034103000null null 1 2009-01-06 06:15:00
0310342010152008-12-31 13:58:002008-12-31 13:58:001 2009-01-06 11:18:00
0310342020152008-12-31 13:58:002008-12-31 15:30:001 2009-01-06 11:18:00
0310342020252008-12-31 20:41:002008-12-31 22:01:001 2009-01-06 11:18:00
0310342020262008-12-31 22:18:002008-12-31 22:18:001 2009-01-06 11:18:00
0310342020302009-01-01 01:34:002009-01-01 01:34:001 2009-01-06 11:18:00
0310342020362009-01-01 05:32:002009-01-01 07:23:001 2009-01-06 11:18:00
0310342020402009-01-02 13:36:002009-01-02 13:37:001 2009-01-06 11:18:00
0310342020542009-01-02 23:01:002009-01-02 23:01:001 2009-01-06 11:18:00
0310342020702009-01-03 12:35:002009-01-03 12:35:001 2009-01-06 11:18:00
0310342020752009-01-03 13:48:002009-01-03 13:48:001 2009-01-06 11:18:00
0310342020802009-01-03 15:09:002009-01-03 15:09:001 2009-01-06 11:18:00
0310342020902009-01-05 08:53:002009-01-05 08:53:001 2009-01-06 11:18:00
0310342020952009-01-05 11:17:002009-01-05 11:18:001 2009-01-06 11:18:00
031034203000null null 1 2009-01-06 11:18:00
0310343010152008-12-31 12:56:002008-12-31 12:56:001 2009-01-06 11:18:00
0310343020152008-12-31 12:56:002008-12-31 18:09:001 2009-01-06 11:18:00
0310343020252008-12-31 22:02:002008-12-31 23:29:001 2009-01-06 11:18:00
0310343020262008-12-31 23:36:002008-12-31 23:36:001 2009-01-06 11:18:00
0310343020302009-01-01 03:16:002009-01-01 03:16:001 2009-01-06 11:18:00
0310343020362009-01-01 05:32:002009-01-01 07:23:001 2009-01-06 11:18:00
0310343020402009-01-02 15:41:002009-01-02 15:41:001 2009-01-06 11:18:00
0310343020542009-01-03 01:45:002009-01-03 01:45:001 2009-01-06 11:18:00
0310343020702009-01-03 11:51:002009-01-03 11:52:001 2009-01-06 11:18:00
0310343020752009-01-03 11:52:002009-01-03 11:52:001 2009-01-06 11:18:00
0310343020802009-01-03 15:08:002009-01-03 15:08:001 2009-01-06 11:18:00
0310343020902009-01-05 10:06:002009-01-05 10:06:001 2009-01-06 11:18:00
0310343020952009-01-05 11:17:002009-01-05 11:17:001 2009-01-06 11:18:00
031034303000null null 1 2009-01-06 11:18:00
0310344010152008-12-31 15:31:002008-12-31 15:31:001 2009-01-06 11:18:00
0310344020152008-12-31 15:31:002008-12-31 17:05:001 2009-01-06 11:18:00
0310344020252008-12-31 23:30:002009-01-01 00:50:001 2009-01-06 11:18:00
0310344020262009-01-01 01:34:002009-01-01 01:34:001 2009-01-06 11:18:00
0310344020302009-01-01 05:39:002009-01-01 05:39:001 2009-01-06 11:18:00
0310344020362009-01-01 17:10:002009-01-01 17:10:001 2009-01-06 11:18:00
0310344020402009-01-02 14:24:002009-01-02 14:24:001 2009-01-06 11:18:00
0310344020542009-01-02 23:00:002009-01-02 23:01:001 2009-01-06 11:18:00
0310344020702009-01-03 04:55:002009-01-03 04:55:001 2009-01-06 11:18:00
0310344020752009-01-03 17:35:002009-01-03 17:38:001 2009-01-06 11:18:00
0310344020802009-01-03 22:49:002009-01-03 22:49:001 2009-01-06 11:18:00
0310344020902009-01-05 02:39:002009-01-05 02:40:001 2009-01-06 11:18:00
0310344020952009-01-05 04:19:002009-01-05 04:19:001 2009-01-06 11:18:00
031034403000null null 1 2009-01-06 11:18:00
0310345010152008-12-31 17:27:002008-12-31 17:27:001 2009-01-06 11:18:00
0310345020152009-01-02 07:55:002009-01-02 12:58:001 2009-01-06 11:18:00
0310345020252009-01-02 18:06:002009-01-02 20:05:001 2009-01-06 11:18:00
0310345020262009-01-02 20:12:002009-01-02 20:12:001 2009-01-06 11:18:00
0310345020302009-01-02 21:26:002009-01-02 21:26:001 2009-01-06 11:18:00
0310345020362009-01-03 00:51:002009-01-03 08:06:001 2009-01-06 11:18:00
0310345020402009-01-03 13:04:002009-01-03 13:04:001 2009-01-06 11:18:00
0310345020542009-01-03 15:16:002009-01-03 15:16:001 2009-01-06 11:18:00
0310345020702009-01-04 01:48:002009-01-04 01:48:001 2009-01-06 11:18:00
0310345020752009-01-04 01:49:002009-01-04 01:49:001 2009-01-06 11:18:00
0310345020802009-01-04 03:13:002009-01-04 03:13:001 2009-01-06 11:18:00
0310345020902009-01-05 15:22:002009-01-05 15:22:001 2009-01-06 11:18:00
0310345020952009-01-05 15:23:002009-01-05 15:23:001 2009-01-06 11:18:00
031034503000null null 1 2009-01-06 11:18:00
..............
这些数据反映的就是每个表单(sorder)经过很多工序(sorder)时记录花费的时间。
现在要统计
从2015工序开始时间到2026工序结束时间,需要多少时间;
从2026工序结束时间到2036工序结束时间,需要多少时间;
从2036工序结束时间到2075工序结束时间,需要多少时间;
从2075工序结束时间到入库时间,需要多少时间。
全部以小时显示,带小数点后2位。
请问高手 以上SQL语句该如何修改,怎么写。
在这里先谢了!!!!!
[解决办法]
将每个工序 结束-开始 在 合计
select t1.SORDER, 时间段1(2015~2026) , 时间段2(2026~2036) ,时间段3(2036~2075),时间段4
from
(select A.SORDER,to_char(sum(A.JSTSTM-A.JSTSTM)*24,'9990.99')||'小时' AS 时间段1(2015~2026)
from factv2.SAGPLNFL A,FACTV2.SGPROGSS B
Where B.WAREHUSFG=1(1为入库标志)
AND A.SORDER=B.SORDER
and a.KOTECD>=2015 and a.KOTECD<2026
group by sorder
) t1 ,
(select A.SORDER,to_char(sum(A.JSTSTM-A.JSTSTM)*24,'9990.99')||'小时' AS 时间段2(2026~2036)
from factv2.SAGPLNFL A,FACTV2.SGPROGSS B
Where B.WAREHUSFG=1(1为入库标志)
AND A.SORDER=B.SORDER
and a.KOTECD>=2026 and a.KOTECD<2036
group by sorder
) t2 ,
(select A.SORDER,to_char(sum(A.JSTSTM-A.JSTSTM)*24,'9990.99')||'小时' AS 时间段3(2036~2075)
from factv2.SAGPLNFL A,FACTV2.SGPROGSS B
Where B.WAREHUSFG=1(1为入库标志)
AND A.SORDER=B.SORDER
and a.KOTECD>=2036 and a.KOTECD<2075
group by sorder
) t3 ,
(select A.SORDER,to_char(sum(A.JSTSTM-A.JSTSTM)*24,'9990.99')||'小时' AS 时间段4
from factv2.SAGPLNFL A,FACTV2.SGPROGSS B
Where B.WAREHUSFG=1(1为入库标志)
AND A.SORDER=B.SORDER
and a.KOTECD>=2036 and a.KOTECD<2075
group by sorder
) t4
where t1.SORDER=t2.SORDER
and t1.SORDER=t3.SORDER
and t1.SORDER=t4.SORDER
ORDER BY SORDER
[解决办法]
- SQL code
SELECT A.SORDER, MIN(KOTECED), MAX(KOTECED), trunc(SUM(A.JSTETM - A.JSTSTM) * 24, 2) AS 时间 FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD >= 2015 AND A.KOTECD <= 2026 GROUP BY A.SORDERUNION ALLSELECT A.SORDER, MIN(KOTECED), MAX(KOTECED), trunc(SUM(A.JSTETM - A.JSTSTM) * 24, 2) AS 时间 FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD > 2026 AND A.KOTECD <= 2037 GROUP BY A.SORDERUNION ALLSELECT A.SORDER, MIN(KOTECED), MAX(KOTECED), trunc(SUM(A.JSTETM - A.JSTSTM) * 24, 2) AS 时间 FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD > 2037 AND A.KOTECD < 2075 GROUP BY A.SORDERUNION ALLSELECT A.SORDER, MIN(KOTECED), MAX(KOTECED), trunc(A.WAREETM - A.JSTETM, 2) AS 时间 FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD = 2075 GROUP BY A.SORDER
[解决办法]
- SQL code
--行列转换SELECT SORDER, SUM(decode(sjd, '2015-2026', sj, 0)) '2015-2026', SUM(decode(sjd, '2026-2037', sj, 0)) '2026-2037', SUM(decode(sjd, '2037-2075', sj, 0)) '2037-2075', SUM(decode(sjd, '2075-', sj, 0)) '2075-', FROM (SELECT A.SORDER, '2015-2026' AS sjd, trunc(SUM(A.JSTETM - A.JSTSTM) * 24, 2) AS sj FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD >= 2015 AND A.KOTECD <= 2026 GROUP BY A.SORDER UNION ALL SELECT A.SORDER, '2026-2037', trunc(SUM(A.JSTETM - A.JSTSTM) * 24, 2) AS sj FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD > 2026 AND A.KOTECD <= 2037 GROUP BY A.SORDER UNION ALL SELECT A.SORDER, '2037-2075' sjd, trunc(SUM(A.JSTETM - A.JSTSTM) * 24, 2) AS sj FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD > 2037 AND A.KOTECD < 2075 GROUP BY A.SORDER UNION ALL SELECT A.SORDER, '2075-', trunc(A.WAREETM - A.JSTETM, 2) AS sj FROM factv2.SAGPLNFL A, FACTV2.SGPROGSS B WHERE B.WAREHUSFG = 1 AND A.SORDER = B.SORDER AND A.KOTECD = 2075 GROUP BY A.SORDER)
