0

A1、A2、a3、a4、b1、b2、b3、b4の8ビット列があります。8 つすべてが完全に独立しており、これらに基づいて別のフィールドに入力する必要があります。

この他のフィールドを、8 つの列のどれが 1 に設定されているかに応じて、テキスト A、B、または AB で更新したいと考えています。

いくつかの例を次に示します。- 8 つのフィールドすべてが 1 に設定されている
場合は AB が入力されます - A3 と B1 が 1 に設定されている場合は AB が入力されます
- A1 と A3 が 1 に設定されている
場合は A が入力されます - B4 と B2 が 1 に設定されている場合は次に、B を入力します。

したがって、A1 から B4 までの任意の組み合わせに対して、フィールドを設定する必要があります

以下は私が試したものですが、不完全ですが、アイデアが得られます。

アップデート

エイドリアンからの正解

UPDATE m
SET ref = ASet + BSet 
FROM contactMaster m
inner join contact c on 
m.contactid = c.contactid
 CROSS APPLY (
     SELECT CASE WHEN (c.A1 | c.A2 | c.A3 | c.A4) = 1 THEN 'C' ELSE '' END AS ASet
           ,CASE WHEN (c.B1 | c.B2 | c.B3 | c.B4) = 1 THEN 'D' ELSE '' END AS BSet
 ) AS CA1 
where ref is null
4

2 に答える 2

2
UPDATE ContactMaster
    SET ref = ASet + BSet 
FROM ContactMaster
     INNER JOIN Contact
          ON ContactMaster.ContactId = Contact.ContactId
     CROSS APPLY (
         SELECT CASE WHEN (Contact.A1 | Contact.A2 | Contact.A3 | Contact.A4) = 1 THEN 'A' ELSE '' END AS ASet
               ,CASE WHEN (Contact.B1 | Contact.B2 | Contact.B3 | Contact.B4) = 1 THEN 'B' ELSE '' END AS BSet
     ) AS CA1 
WHERE ContactMaster.ref IS NULL
于 2013-10-17T10:20:06.657 に答える