2016-08-23 3 views
0

Почему я получаю сообщение об ошибке, что B1.EMPLOYEE_ID недопустимый идентификатор SQL Ниже:Oracle SQL Update с rowover раздела

UPDATE TABLE_1 A1 
    SET A1.ADDL_SEQ = (SELECT SEQ 
         FROM (SELECT ROW_NUMBER() OVER (PARTITION BY EMPLOYEE_ID 
                 ORDER BY EMPLOYEE_ID, ERNCD) SEQ 
           FROM TABLE_1) B1 
         WHERE B1.EMPLOYEE_ID=A1.EMPLOYEE_ID); 
+1

Вы не 'select' employee_id в суб-запроса с псевдонимом' B1' –

+0

Спасибо. теперь я получаю ошибку «однострочный подзапрос возвращает более одной строки». То, что я пытаюсь достичь, - это увеличить значение порядкового номера IF EMPOYEE_ID, ERNCD - это то же самое –

ответ

2

Вы можете написать заявление обновления также, как это:

UPDATE 
    (SELECT EMPLOYEE_ID, ADDL_SEQ, 
     ROW_NUMBER() OVER (PARTITION BY EMPLOYEE_ID ORDER BY EMPLOYEE_ID, ERNCD) AS SEQ 
    FROM TABLE_1) 
SET ADDL_SEQ = SEQ; 
-1

Add например,

UPDATE TABLE_1 A1 
     SET A1.ADDL_SEQ = (SELECT 
          (CASE WHEN employee_id = ERNCD THEN seq ELSE NULL END) AS SEQ 
          FROM (SELECT ROW_NUMBER() OVER (PARTITION BY EMPLOYEE_ID 
                  ORDER BY EMPLOYEE_ID, ERNCD) SEQ 
            FROM TABLE_1) B1 
          WHERE B1.EMPLOYEE_ID=A1.EMPLOYEE_ID); 

Я не думаю, что вам нужно условие WHERE, но его k Ind трудно визуализировать данные

0

Вы должны добавить EMPLOYEE_ID к вашему B1 внутреннего запроса:

UPDATE TABLE_1 A1 
    SET A1.ADDL_SEQ = (SELECT SEQ 
         FROM (SELECT EMPLOYEE_ID,ROW_NUMBER() OVER (PARTITION BY EMPLOYEE_ID 
                 ORDER BY EMPLOYEE_ID, ERNCD) SEQ 
           FROM TABLE_1) B1 
         WHERE B1.EMPLOYEE_ID=A1.EMPLOYEE_ID); 
Смежные вопросы