我有一个名为"BBSEC2013_REPORTS“的表,其中"Q19_MARKETING”列中的某些值为NULL。我想要的是用主表中前面的"Q1_UNIT_SERIAL_NO“值来更新这些空值。
SQL:
找到诺尔斯
SELECT R.BOOK_ID, R.QUESTIONNARIE_ID, R.Q1_UNIT_SERIAL_NO , R.Q19_MARKETING
FROM BBSEC2013_REPORTS R
WHERE ( R.Q19_MARKETING = 9 OR R.Q19_MARKETING is null )
AND F_TO_NUMBER(SUBSTR(R.Q6_IND_CODE_CLASS_CODE,1,2)) BETWEEN 10 AND 33
ORDER BY R.BOOK_ID, R.QUESTIONNARIE_ID, R.Q1_UNIT_SERIAL_NO前一单元的选择值
SELECT R.Q19_MARKETING FROM BBSEC2013_REPORTS R
WHERE R.BOOK_ID = * BOOK_ID OF SQL-1
AND R.Q1_UNIT_SERIAL_NO = * DECREMENT VALUE OF "Q1_UNIT_SERIAL_NO" OF SQL-1
ORDER R.BY BOOK_ID, R.QUESTIONNARIE_ID,R.Q1_UNIT_SERIAL_NO更新
UPDATE BBSEC2013_REPORTS
SET Q19_MARKETING= Q19_MARKETING OF SQL-2
WHERE BOOK_ID = * BOOK_ID OF SQL-1
AND Q1_UNIT_SERIAL_NO = * Q1_UNIT_SERIAL_NO OF SQL-1

发布于 2014-12-04 08:55:33
您应该能够将所提供的DML语句组合成一个。
UPDATE bbsec2013_reports r
SET r.q19_marketing =
(SELECT r1.q19_marketing
FROM bbsec2013_reports r1
WHERE r1.book_id = r.book_id
AND r1.q1_unit_serial_no = to_char(to_number(r.q1_unit_serial_no)-1, 'FM000'))
WHERE ( r.q19_marketing = 9
OR r.q19_marketing IS NULL)
AND f_to_number(substr(r.q6_ind_code_class_code, 1, 2)) BETWEEN 10 AND 33(编辑)或如果减少(如果不一定为1:
UPDATE bbsec2013_reports r
SET r.q19_marketing =
(SELECT max(r1.q19_marketing) KEEP (DENSE_RANK LAST ORDER BY r1.q1_unit_serial_no)
FROM bbsec2013_reports r1
WHERE r1.book_id = r.book_id
AND r1.q1_unit_serial_no < r.q1_unit_serial_no)
WHERE ( r.q19_marketing = 9
OR r.q19_marketing IS NULL)
AND f_to_number(substr(r.q6_ind_code_class_code, 1, 2)) BETWEEN 10 AND 33现在,如果需要的话,您可以向子查询中添加额外的WHERE子句,例如,r1.q19_marketing <> 9 AND r1.q19_marketing IS NOT NULL查找具有有效q19_marketing值的前一条记录。
发布于 2015-02-02 10:24:06
(代表执行部分张贴)。
我有个解决方案:
DECLARE
V_MARKETING NUMBER;
BEGIN
FOR X IN (SELECT QUESTIONNARIE_ID FROM BBSEC2013_REPORTS
WHERE Q6_IND_CODE_CLASS_CODE < 3400
AND (Q19_MARKETING IS NULL OR Q19_MARKETING=9)
)
LOOP
SELECT Q19_MARKETING
INTO V_MARKETING
FROM BBSEC2013_REPORTS
WHERE QUESTIONNARIE_ID=(SELECT MAX(QUESTIONNARIE_ID)
FROM BBSEC2013_REPORTS
WHERE QUESTIONNARIE_ID < X.QUESTIONNARIE_ID
AND Q6_IND_CODE_CLASS_CODE<3400
AND (Q19_MARKETING IS NOT NULL OR Q19_MARKETING!=9)
);
IF V_MARKETING > 0 THEN
UPDATE BBSEC2013_REPORTS
SET Q19_MARKETING = V_MARKETING
WHERE QUESTIONNARIE_ID = X.QUESTIONNARIE_ID;
END IF;
COMMIT;
END LOOP;
END;https://stackoverflow.com/questions/27287744
复制相似问题