2012-03-02 108 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

相關問題