2014-03-25 62 views
0

我想從表,FirstName和LastName更新2個字段,從同一個表中獲取數據,但從名稱字段包含名和姓。更新與案件sql不工作

我想:

UPDATE Table SET FirstName = (SELECT CASE 
       WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) 
       ELSE name 
       END 
        from Table), 
LastName = (select CASE 
     WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1) 
     END from Table) 

我收到以下錯誤信息:子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

+0

檢查您的子查詢。錯誤說自己。它不能允許超過1個值。它只能返回一個值。你使用兩個不同的表?可以將Table Only視爲表名。 – rach

+0

答案將取決於後端,儘管消息確實聽起來像SQL服務器 –

+0

您可能需要對其進行重新修改,以便您沒有子查詢。在我看來,你不應該需要這些子查詢。案例陳述是,子查詢沒有。 –

回答

2

你並不需要一個子查詢,只是邏輯:

UPDATE Table 
    SET FirstName = (CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) 
          ELSE name 
        END), 
     LastName = (CASE WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1) 
        END 
        ); 

或者添加where語句並做兩次更新:

UPDATE Table 
    SET FirstName = LEFT(name, Charindex(' ', name) - 1), 
     LastName = RIGHT(name, Charindex(' ', Reverse(name)) - 1) 
    WHERE name LIKE '% %'; 

UPDATE TABLE 
    SET LastName = NULL 
    WHERE name not like '% %'; 

可能並不需要第二個,如果場已經是NULL

+0

哈,我花了太多的時間格式 –