首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过同一表中的前一条记录更新空值?

如何通过同一表中的前一条记录更新空值?
EN

Stack Overflow用户
提问于 2014-12-04 06:35:57
回答 2查看 980关注 0票数 0

我有一个名为"BBSEC2013_REPORTS“的表,其中"Q19_MARKETING”列中的某些值为NULL。我想要的是用主表中前面的"Q1_UNIT_SERIAL_NO“值来更新这些空值。

SQL:

找到诺尔斯

代码语言:javascript
复制
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

前一单元的选择值

代码语言:javascript
复制
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

更新

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-04 08:55:33

您应该能够将所提供的DML语句组合成一个。

代码语言:javascript
复制
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:

代码语言:javascript
复制
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值的前一条记录。

票数 1
EN

Stack Overflow用户

发布于 2015-02-02 10:24:06

(代表执行部分张贴)。

我有个解决方案:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27287744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档