2015-10-26 7 views
0

У меня есть таблица, как этотОбновление таблицы на основе одинаковых значений в столбце одной таблицы

InsuredID | EmployeeNumber | MemberTypeID | LinkedMemberID 
---------------------------------------------------------------- 
1001012  | 39018    | 102   | 0 
1001061  | 39018    | 100   | 0 
1001147  | 39019    | 102   | 0 
1001196  | 39019    | 100   | 0 

мне нужно обновить LinkedMemberID в этой таблице значения InsuredID из с той же EmployeeNumber и MemberTypeID = 100 для всех MemberTypes которые не являются 100.

LinkedMemberID из MemberTypeID = 100 останется 0.

После обновления, таблица должна выглядеть

InsuredID | EmployeeNumber | MemberTypeID | LinkedMemberID 
---------------------------------------------------------------- 
1001012  | 39018    | 102   | 1001061 
1001061  | 39018    | 100   | 0 
1001147  | 39019    | 102   | 1001196 
1001196  | 39019    | 100   | 0 

Я пробовал различные инструкции SQLupdate, но не могу понять, как это сделать. Я использую SQL Server 2008. Пожалуйста, помогите.

+0

решаемые SQL Update Заявление: Обновление t_policy_insured Set LinkedMemberID = t.InsuredID От t_policy_insured Внутреннее соединение t_policy_insured t on t_policy_insured.EmployeeNumber = t.EmployeeNumber и t.MemberTypeID = 100 Где t_policy_insured.Membe rTypeID <> 100 – Nanditha

ответ

0

Если я правильно понимаю, вы хотите update заявление, и вы можете делать то, что вы хотите с join:

update toupdate 
    set LinkedMemberID = t.InsuredID 
    from table toupdate join 
     table t 
     on toupdate.EmployeeNumber = t.EmployeeNumber and 
      t.MemberTypeID = 100 
    where toupdate.MemberTypeID <> 100; 
+0

Это сработало отлично! Огромное спасибо. Я пытался написать аналогичный оператор обновления, но не смог его завершить. Вот мое полное заявление обновления: \t Update t_policy_insured Set LinkedMemberID = t.InsuredID От t_policy_insured внутреннего соединение t_policy_insured т на t_policy_insured.EmployeeNumber = t.EmployeeNumber и t.MemberTypeID = 100 Где t_policy_insured.MemberTypeID <> 100 – Nanditha

0

Вы можете использовать функцию APPLY:

SELECT 
    t.InsuredID, 
    EmployeeNumber, 
    MemberTypeID, 
    LinkedMemberID = CASE WHEN t.MemberTypeID = 100 THEN LinkedMemberID ELSE x.InsuredID END 
FROM tbl t 
OUTER APPLY (
    SELECT InsuredID 
    FROM tbl 
    WHERE EmployeeNumber = t.EmployeeNumber 
    AND MemberTypeID = 100 
)x 

SQL Fiddle


Преобразование его в UPDATE заявление:

UPDATE t 
    SET t.LinkedMemberID = x.InsuredID 
FROM tbl t 
OUTER APPLY (
    SELECT TOP 1 InsuredID 
    FROM tbl 
    WHERE EmployeeNumber = t.EmployeeNumber 
    AND MemberTypeID = 100 
    ORDER BY InsuredID DESC 
)x 
WHERE t.MemberTypeID <> 100 

SQL Fiddle

+0

Ваш запрос: SELECT not UPDATE –

+0

Спасибо за то, что так быстро. Я попробовал ваш код, но раньше я не использовал внешний вид. Я читаю об этом сейчас, и мы, надеюсь, будем полезны в другом месте. – Nanditha

+0

Нет проблем. Я предлагаю вам прочитать эти две прекрасные статьи Пол Уайта на тему «ПРИКЛАДКА». [Часть 1] (http: // http: //www.sqlservercentral.com/articles/APPLY/69953/) и [Часть 2] (http: // http: //www.sqlservercentral.com/articles/APPLY/ 69954 /) –

0

Вы можете попробовать это:

UPDATE Your_Table 
SET LinkedMemberID = (SELECT TOP 1 T.InsuredID 
         FROM Your_Table T 
         WHERE T.EmployeeNumber = Your_Table.EmployeeNumber 
         AND T.MemberTypeID = 100) 
WHERE MemberTypeID <> 100 
+0

Это работало слишком. Утверждение простое и понятное. Спасибо. – Nanditha

Смежные вопросы