2016-08-23 57 views
0

爲什麼我得到錯誤B1.EMPLOYEE_ID是SQL下面無效的標識符:的Oracle SQL更新與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

你沒有別名爲'B1' –

+0

謝謝子查詢'select' EMPLOYEE_ID。現在我收到錯誤「單行子查詢返回多行」。我試圖實現的是增加序列號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

添加case case,像這樣

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);