SELECT CORP_NAME,WAREHOUSE_NAME,TO_CHAR(X.DAYS,'YYYY-MM-DD') AS DAYS ,NVL(SUM(X.MPIECES),0) TOTALPIECES,NVL(SUM(Y.MPIECES),0) SCANPIECES ,ROUND(NVL(SUM(Y.MPIECES),0)/NVL(SUM(X.MPIECES),1),2)*100||'%' RATE
,NVL(SUM(Z.LoadPieces),0) LOADTOTALPIECES,NVL(SUM(U.MPIECES),0) LOADSCANPIECES ,decode(SUM(Z.LoadPieces),0,0,ROUND(NVL(SUM(U.MPIECES),0)/NVL(SUM(Z.LoadPieces),1),2))*100||'%' LOADRATE
FROM (
SELECT C.CORP_NAME,B.WAREHOUSE_NAME,TRUNC(A.UPDATE_TIME) DAYS,A.MANIFEST_NO,SUM(PIECES) MPIECES
FROM WARE_STOCK_IN_OUT A
LEFT JOIN BASE_WAREHOUSE B ON A.WAREHOUSE_ID = B.PKID
LEFT JOIN BASE_BRANCH_CORP C ON B.CORP_ID = C.PKID
WHERE A.REMARK='出港入库' AND ACTION_TYPE=0
AND to_char(A.UPDATE_TIME,'hh24miss')>=to_char(:timeFrom,'hh24miss')
AND to_char(A.UPDATE_TIME,'hh24miss')<=to_char(:timeTo,'hh24miss')
GROUP BY TRUNC(A.UPDATE_TIME), B.WAREHOUSE_NAME,C.CORP_NAME,A.MANIFEST_NO
) X LEFT JOIN
(
SELECT TRUNC(A.UPDATE_TIME) DAYS ,A.MANIFEST_NO,COUNT(DISTINCT BARCODE) MPIECES
FROM WARE_CARGO_BARCODE_SCAN A
WHERE PURPOSE='StockIn' AND DELETE_FLAG IN (0,1)
{0}
GROUP BY TRUNC(A.UPDATE_TIME),A.MANIFEST_NO
) Y ON X.DAYS = Y.DAYS AND X.MANIFEST_NO = Y.MANIFEST_NO
LEFT JOIN (
SELECT A.MANIFEST_NO, LoadPieces-NVL(B.UnLoadPieces,0) AS LoadPieces
FROM (SELECT MANIFEST_NO,SUM(PIECES) AS LoadPieces
FROM WARE_CARRIER_USED
WHERE ACTION_TYPE = 0 AND REMARK in ('载具装货','出港入库')
GROUP BY MANIFEST_NO ) A
LEFT JOIN (SELECT MANIFEST_NO,SUM(PIECES) AS UnLoadPieces
FROM WARE_CARRIER_USED
WHERE ACTION_TYPE = 1 AND REMARK='载具卸货'
GROUP BY MANIFEST_NO ) B ON A.MANIFEST_NO = B.MANIFEST_NO
) Z ON X.MANIFEST_NO = Z.MANIFEST_NO
LEFT JOIN (
SELECT A.MANIFEST_NO,COUNT(DISTINCT A.BARCODE) MPIECES
FROM ware_cargo_barcode_scan A
LEFT JOIN (select barcode,max(update_time) lastUpdateTime
from ware_cargo_barcode_scan
where update_time > = :startTime and update_time< = :endTime
group by barcode ) B on a.barcode = b.barcode
WHERE a.update_time = b.lastUpdateTime and update_time > = :startTime and update_time< = :endTime
AND purpose = 'CarrierLoad' and DELETE_FLAG IN (0,1,5)
{0}
GROUP BY A.MANIFEST_NO) U ON X.MANIFEST_NO = U.MANIFEST_NO
WHERE 1=1 ", strWhere);
F5 执行计划 看看有没有全表 或者那个花费大。多给条件加上索引建议组合索引。如果数据量很大的话 5秒还可以的