|
MERGE INTO TTPVMS200 A
USING (
SELECT b.COM_CD, b.TIC_LINK_ID, b.PROC_BASE_DTM, b.AREA_CD, DECODE(b.OP_CNGS_LVL_CD, '0', b.TRVL_SPD, b.OP_TRVL_SPD) TRVL_SPD,
DECODE(DECODE(b.OP_CNGS_LVL_CD, '0', b.TRVL_SPD, b.OP_TRVL_SPD), 0, 0,
CASE WHEN (ROUND((b.TRVL_DIST / (DECODE(b.OP_CNGS_LVL_CD, '0', b.TRVL_SPD, b.OP_TRVL_SPD) * y.WGHTDIST))*y.WGHTTIME,0) < 99999)
THEN ROUND((b.TRVL_DIST / (DECODE(b.OP_CNGS_LVL_CD, '0', b.TRVL_SPD, b.OP_TRVL_SPD) * y.WGHTDIST))*y.WGHTTIME,0)
ELSE 99999
END ) TRVL_TM,
b.TRVL_DIST,
DECODE(b.OP_CNGS_LVL_CD, '0', b.CNGS_LVL_CD, b.OP_CNGS_LVL_CD) CNGS_LVL_CD, b.PATT_TRVL_SPD, b.PATT_TRVL_TM, b.PATT_CNGS_LVL_CD, b.AREA_BASE_DTM
FROM
TTPCMS200 b,
(
SELECT CASE WHEN x.SRC_DIST = x.TGT_DIST
THEN 1
ELSE ( SELECT WGHT_CONV
FROM TCMNCD011
WHERE UNIT_TYPE_CD = 'CMN05'
AND SRC_UNIT_CD = x.SRC_DIST
AND TGT_UNIT_CD = x.TGT_DIST )
END WGHTDIST,
CASE WHEN x.SRC_TIME = x.TGT_TIME
THEN 1
ELSE ( SELECT WGHT_CONV
FROM TCMNCD011
WHERE UNIT_TYPE_CD = 'CMN07'
AND SRC_UNIT_CD = x.SRC_TIME
AND TGT_UNIT_CD = x.TGT_TIME )
END WGHTTIME
FROM
(
SELECT a.SPD_UNIT_CD, b.CODE_PARAM_VAL1 SRC_DIST, a.DIST_UNIT_CD TGT_DIST,
b.CODE_PARAM_VAL2 SRC_TIME, a.TM_UNIT_CD TGT_TIME
FROM TTMNMS001 a, TCMNCD002 b
WHERE a.COM_CD = 'TIC0'
AND a.COM_DEF_CD = '00'
AND b.CATG_CD = 'CMN06'
AND a.SPD_UNIT_CD = b.COMN_CD
) x
) y
WHERE
b.PROC_BASE_DTM = #procBaseDtm#
AND
b.AREA_CD = CASE WHEN #areaCd# IS NULL THEN b.AREA_CD ELSE #areaCd# END
) B
ON (
A.COM_CD = B.COM_CD
AND
A.TIC_LINK_ID = B.TIC_LINK_ID
)
WHEN NOT MATCHED THEN
INSERT(
A.TIC_LINK_ID, A.COM_CD, A.PROC_BASE_DTM, A.AREA_CD, A.TRVL_SPD,
A.TRVL_TM, A.TRVL_DIST,
A.CNGS_LVL_CD, A.PATT_TRVL_SPD, A.PATT_TRVL_TM, A.PATT_CNGS_LVL_CD, A.AREA_BASE_DTM
)
VALUES (
B.TIC_LINK_ID, B.COM_CD, B.PROC_BASE_DTM, B.AREA_CD, B.TRVL_SPD,
B.TRVL_TM,
B.TRVL_DIST,
B.CNGS_LVL_CD, B.PATT_TRVL_SPD, B.PATT_TRVL_TM, B.PATT_CNGS_LVL_CD, B.AREA_BASE_DTM
)
WHEN MATCHED THEN
UPDATE SET
A.PROC_BASE_DTM = B.PROC_BASE_DTM,
A.AREA_CD = B.AREA_CD,
A.TRVL_SPD = B.TRVL_SPD,
A.TRVL_TM = B.TRVL_TM,
A.TRVL_DIST = B.TRVL_DIST,
A.CNGS_LVL_CD = B.CNGS_LVL_CD,
A.PATT_TRVL_SPD = B.PATT_TRVL_SPD,
A.PATT_TRVL_TM = B.PATT_TRVL_TM,
A.PATT_CNGS_LVL_CD = B.PATT_CNGS_LVL_CD,
A.AREA_BASE_DTM = B.AREA_BASE_DTM
]]>
不知道怎么优化提高效率,本人想把子查询转换成内连接或者用一种方式提高效率。
最好少用Select来完成结果。
请高手来帮忙! |
|