这句sql还能再优化吗
UPDATE
CM_SKK2 A
SET S14 =
(SELECT
DECODE (WK_CM_NO,
'00', SUM(KARI_KIN_00) - SUM(KASI_KIN_00),
'01', SUM(KARI_KIN_01) - SUM(KASI_KIN_01),
'02', SUM(KARI_KIN_02) - SUM(KASI_KIN_02),
'03', SUM(KARI_KIN_03) - SUM(KASI_KIN_03),
'04', SUM(KARI_KIN_04) - SUM(KASI_KIN_04),
'05', SUM(KARI_KIN_05) - SUM(KASI_KIN_05),
'06', SUM(KARI_KIN_06) - SUM(KASI_KIN_06),
'07', SUM(KARI_KIN_07) - SUM(KASI_KIN_07),
'08', SUM(KARI_KIN_08) - SUM(KASI_KIN_08),
'09', SUM(KARI_KIN_09) - SUM(KASI_KIN_09),
'10', SUM(KARI_KIN_10) - SUM(KASI_KIN_10),
'11', SUM(KARI_KIN_11) - SUM(KASI_KIN_11),
'12', SUM(KARI_KIN_12) - SUM(KASI_KIN_12),
'13', SUM(KARI_KIN_13) - SUM(KASI_KIN_13),
'14', SUM(KARI_KIN_14) - SUM(KASI_KIN_14),
DEF_CURRENCY)
FROM
CBMSCA.CATZAN2R B
WHERE
B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000'
GROUP BY
B.SEG1_CD
)
WHERE
A.S01 =
(SELECT
B.SEG1_CD
FROM
CBMSCA.CATZAN2R B
WHERE
B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000'
GROUP BY
B.SEG1_CD
);
UPDATE
CM_SKK2 A
SET S14 =
(SELECT
DECODE (WK_CM_NO,
'00', SUM(KARI_KIN_00) - SUM(KASI_KIN_00),
'01', SUM(KARI_KIN_01) - SUM(KASI_KIN_01),
'02', SUM(KARI_KIN_02) - SUM(KASI_KIN_02),
'03', SUM(KARI_KIN_03) - SUM(KASI_KIN_03),
'04', SUM(KARI_KIN_04) - SUM(KASI_KIN_04),
'05', SUM(KARI_KIN_05) - SUM(KASI_KIN_05),
'06', SUM(KARI_KIN_06) - SUM(KASI_KIN_06),
'07', SUM(KARI_KIN_07) - SUM(KASI_KIN_07),
'08', SUM(KARI_KIN_08) - SUM(KASI_KIN_08),
'09', SUM(KARI_KIN_09) - SUM(KASI_KIN_09),
'10', SUM(KARI_KIN_10) - SUM(KASI_KIN_10),
'11', SUM(KARI_KIN_11) - SUM(KASI_KIN_11),
'12', SUM(KARI_KIN_12) - SUM(KASI_KIN_12),
'13', SUM(KARI_KIN_13) - SUM(KASI_KIN_13),
'14', SUM(KARI_KIN_14) - SUM(KASI_KIN_14),
DEF_CURRENCY)
FROM
CBMSCA.CATZAN2R B
WHERE
B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000'
GROUP BY
B.SEG1_CD
)
WHERE
A.S01 =
(SELECT
B.SEG1_CD
FROM
CBMSCA.CATZAN2R B
WHERE
B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000'
GROUP BY
B.SEG1_CD
);
UPDATE CM_SKK2 A
SET S14 = (SELECT DECODE(WK_CM_NO,
'00',
SUM(KARI_KIN_00) - SUM(KASI_KIN_00),
'01',
SUM(KARI_KIN_01) - SUM(KASI_KIN_01),
'02',
SUM(KARI_KIN_02) - SUM(KASI_KIN_02),
'03',
SUM(KARI_KIN_03) - SUM(KASI_KIN_03),
'04',
SUM(KARI_KIN_04) - SUM(KASI_KIN_04),
'05',
SUM(KARI_KIN_05) - SUM(KASI_KIN_05),
'06',
SUM(KARI_KIN_06) - SUM(KASI_KIN_06),
'07',
SUM(KARI_KIN_07) - SUM(KASI_KIN_07),
'08',
SUM(KARI_KIN_08) - SUM(KASI_KIN_08),
'09',
SUM(KARI_KIN_09) - SUM(KASI_KIN_09),
'10',
SUM(KARI_KIN_10) - SUM(KASI_KIN_10),
'11',
SUM(KARI_KIN_11) - SUM(KASI_KIN_11),
'12',
SUM(KARI_KIN_12) - SUM(KASI_KIN_12),
'13',
SUM(KARI_KIN_13) - SUM(KASI_KIN_13),
'14',
SUM(KARI_KIN_14) - SUM(KASI_KIN_14),
DEF_CURRENCY)
FROM CBMSCA.CATZAN2R B
WHERE B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000'
GROUP BY B.SEG1_CD)
WHERE EXISTS (SELECT 1
FROM CBMSCA.CATZAN2R B
WHERE B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000');
/--试一下:UPDATE CM_SKK2 A, CBMSCA.CATZAN2R B
SET S14 = DECODE(B.WK_CM_NO,
'00',
SUM(KARI_KIN_00) - SUM(KASI_KIN_00),
'01',
SUM(KARI_KIN_01) - SUM(KASI_KIN_01),
'02',
SUM(KARI_KIN_02) - SUM(KASI_KIN_02),
'03',
SUM(KARI_KIN_03) - SUM(KASI_KIN_03),
'04',
SUM(KARI_KIN_04) - SUM(KASI_KIN_04),
'05',
SUM(KARI_KIN_05) - SUM(KASI_KIN_05),
'06',
SUM(KARI_KIN_06) - SUM(KASI_KIN_06),
'07',
SUM(KARI_KIN_07) - SUM(KASI_KIN_07),
'08',
SUM(KARI_KIN_08) - SUM(KASI_KIN_08),
'09',
SUM(KARI_KIN_09) - SUM(KASI_KIN_09),
'10',
SUM(KARI_KIN_10) - SUM(KASI_KIN_10),
'11',
SUM(KARI_KIN_11) - SUM(KASI_KIN_11),
'12',
SUM(KARI_KIN_12) - SUM(KASI_KIN_12),
'13',
SUM(KARI_KIN_13) - SUM(KASI_KIN_13),
'14',
SUM(KARI_KIN_14) - SUM(KASI_KIN_14),
DEF_CURRENCY),
A.S01 = B.SEG1_CD
WHERE B.SEG1_CD = A.S01
AND B.ACCT_YEAR = WK_CM_NEN
AND B.ACCT_CD = '751A121'
AND B.ASSI_CD = '0000000000'
AND B.DEP_CD = '000' GROUP BY B.SEG1_CD;
第二个如果没重复数据,也可去掉。
执行了下 可是提示set语句出错,还有好像没有SELECT 就不能用GROUP BY 了吧