2012-03-02 103 views
0

TableAid int, batch char(15), mode char(10), match2 char(15), status char(15)SQL Server 2008中:PASS匹配的记录

ID Match MODE match2 STATUS 
1 ABC12 A  123 
2 ABC12 A  123 
3 ABC12 A  123 
4 ABC12 B  234 
5 ABC12 B  234 
6 BCD32 A  456 
7 BCD32 B  456 

所以,我需要填充状态与 'PASS',其中模式= 'B' 和

  1. 对于同一场比赛中,如果其对应的模式A(ID1,2,3)如果我们讲ABC12,它有不同的Match2。

因此,ID 4和5将获得“通过”。

在此先感谢。

+0

所以当B的任何匹配的“匹配”的记录,而不是在MATCH2属性,那么B记录是否是PASS?这是SQL服务器或MySQL或其他? – 2012-03-02 21:50:29

回答

1

尝试以下操作:

CREATE TABLE TableA (id int, match char(15), mode char(10),match2 char(15), status char(15)) 


INSERT INTO TableA (ID, Match, MODE, match2) 
SELECT 1, 'ABC12', 'A',  123 UNION 
SELECT 2, 'ABC12', 'A',  123 UNION 
SELECT 3, 'ABC12', 'A',  123 UNION 
SELECT 4, 'ABC12', 'B',  234 UNION 
SELECT 5, 'ABC12', 'B',  234 UNION 
SELECT 6, 'BCD32', 'A',  456 UNION 
SELECT 7, 'BCD32', 'B',  456 UNION 
SELECT 8, 'ABC23', 'A',  NULL UNION 
SELECT 9, 'ABC23', 'B',  789 


UPDATE 
    t1 
SET 
    status = 'PASS' 
FROM 
    TableA AS t1 
JOIN 
    TableA AS t2 
ON 
    t1.id != t2.id 
AND t1.match = t2.match 
AND (t1.match2 != t2.match2 OR t2.match2 IS NULL) 
AND t2.mode = 'A' 
WHERE 
    t1.mode = 'B' 

SELECT * FROM TableA 
+0

如果match2 = null for mode = A且match = abc12会怎么样?它仍然应该通过ID 4和5,但在这里它不会因为我们将NULL与一个值进行比较。请编辑。谢谢 – 2012-03-02 23:30:35

+0

我又增加了一个案例(请参见ID 8和9) - 这是你的意思吗?上面的代码将标记为'PASS'以及 – diaho 2012-03-02 23:34:56

+0

PERFECT!非常感谢你 ! – 2012-03-02 23:51:57

0

下面是一个备用,使用diaho的表A

MERGE TableA 
    USING (SELECT match, mode, match2 from TableA 
      GROUP BY match, mode, match2) as matches 
ON Tablea.mode = 'B' and matches.mode = 'A' 
AND tableA.match = matches.match 
-- before edit AND tableA.match2 <> matches.match2 
AND tableA.match2 <> Coalesce(matches.match2, 'SomeValueThatCantOccurInMatch2') -- requested edit 
WHEN MATCHED THEN UPDATE 
    SET STATUS = 'PASS' 
    ; 
+0

如果match2 = null,则mode = A且match = abc12。它仍然应该通过ID 4和5,但在这里它不会因为我们将NULL与一个值进行比较。请编辑。谢谢 – 2012-03-02 23:30:23

+0

@BhupinderSingh假设有一个模式= A与NULL和模式= B与NULL,如果它们不匹配,因为NULL == NULL是不正确的?使用Coalesce包装是另一种处理NULL的方法,如果您希望“NULL”匹配“NULL”,包装比较的两侧并具有相同的值以替换NULL,或者如果您希望它们不匹配,则有两种不同的方式值。 – 2012-03-03 13:08:26

相关问题