2013-10-17 49 views
0

我有8位列,A1,A2,a3,a4,b1,b2,b3,b4。所有8个都是完全独立的,并且基于这些应该填充另一个字段。具有案例/ IF的SQL更新

我想更新与文本A,B或AB,这取决于任何8列被设置为1。

下面是两个例子这个其他字段; - 所有8个字段被设置为1,然后用AB填充,
- 如果A3和B1被设置为1,然后用AB填充,
- 如果A1和A3被设置为1,然后用甲填充,
- 如果B4和B2被设置为1,则与B填充

所以通过B4 A1的任意组合的字段应该设置

下面是什么,我都试过,但它是不完整的,但会给一个想法;

UPDATE

从adrianm

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 
正确答案
+1

您的需求是不是真的清楚。您没有提及是否只有两列只能同时设置为'1',或者允许多个列。 – hallie

+0

允许多个。所有8个都是完全独立的,其基础是其他领域应该被填充。 – windowskm

+0

请花你的时间来编辑你的问题,并添加更多的细节。告诉我们您的确切要求是什么,您尝试过的内容(包括代码)以及您为什么陷入这些解决方案,帮助我们重现情况等等。 – Jeroen

回答

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 
0
IF (Select Count(*) from table where A1=1 AND A2 =1 AND a3 =1 AND a4 =1 AND b1 =1 AND b2 =1 AND b3 =1 AND b4=1)>0 
    BEGIN 

    UPDATE MyTable 
    SET ColumnValue ='AB' 
    where A1=1 AND A2 =1 AND a3 =1 AND a4 =1 AND b1 =1 AND b2 =1 AND b3 =1 AND b4=1 
    END 

    ELSE IF (Select Count(*) from table where A1 =1 and A3 =1)>0 

    BEGIN 
    Update MyTable set columnValue ='A' 
    where A1 =1 and A3 =1 
    END