2010-04-30 102 views
0

我有兩個表X和Y的最佳匹配邏輯:如何實現在TSQL(SQL Server 2000中)

表X

C1 C2  C3 

1 A  13 
2 B  16 
3 C  8 

數據表Y

C1  C2  C3  C4 

1  A  2  N 
2  A  8  N 
3  A  12  N 
4  A  5  N 
5  B  7  N 
6  B  16  N 
7  B  9  N 
8  B  5  N 
9  C  8  N 
10  C  2  N 
11  C  8  N 
12  C  6  N 

表Y中的記錄可以是n個號碼

CREATE TABLE X(C1 INT, C2 CHAR(1), C3 INT); 

CREATE TABLE Y(C1 INT, C2 CHAR(1), C3 INT, C4 CHAR(1)); 

具有以下數據:

INSERT INTO X VALUES (1 'A',13); 
INSERT INTO X VALUES (2 'B',16); 
INSERT INTO X VALUES (3 'C',8); 

INSERT INTO Y VALUES (1,'A', 2,'N'); 
INSERT INTO Y VALUES (2,'A', 8,'N'); 
INSERT INTO Y VALUES (3,'A', 12,'N'); 
INSERT INTO Y VALUES (4,'A', 5,'N'); 
INSERT INTO Y VALUES (5,'B', 7,'N'); 
INSERT INTO Y VALUES (6,'B', 16,'N'); 
INSERT INTO Y VALUES (7,'B', 9,'N'); 
INSERT INTO Y VALUES (8,'B', 5,'N'); 
INSERT INTO Y VALUES (9,'C', 8,'N'); 
INSERT INTO Y VALUES (10,'C', 2,'N'); 
INSERT INTO Y VALUES (11,'C', 8,'N'); 
INSERT INTO Y VALUES (12,'C', 6,'N'); 

預期的結果


數據表Y

C1  C2  C3  C4 

1  A  2  N 
2  A  8  Y 
3  A  12  N 
4  A  5  Y 
5  B  7  N 
6  B  16  Y 
7  B  9  N 
8  B  5  N 
9  C  8  Y 
10  C  2  N 
11  C  8  N 
12  C  6  N 

如何比較列C3的值表X與一個將表Y的列C3的可能匹配和在表Y的列C4中將記錄標記爲匹配和不匹配?

可能一個(即,在表X中的列C2的值)匹配將是(其中,R是在數據表Y柱C1的行數,即值):

R1, 
R2, 
R3, 
R4, 
R1+R2, 
R1+R3, 
R1+R4, 
R2+R3, 
R2+R4, 
R3+R4, 
R4+R5, 
R1+R2+R3, 
R1+R2+R4, 
R2+R3+R4, 
R1+R2+R3+R4 
+1

對不起,但爲什麼第四個記錄有Y?也許我並不是不喜歡,但5號不在表A – Claudia 2010-04-30 19:36:03

+0

@Claudia:帶了我一段時間,但我認爲他在尋找完全匹配,以及如果在表X中找到表Y中多行的總和。在表中Y行2和4加起來爲13,存在於表X中。 – BenV 2010-05-01 01:00:55

+0

我也沒有真正得到任務; R1 + R2是什麼意思? – IMHO 2010-05-03 15:46:47

回答

0

你陳述以下

「我如何比較表X中第C3列的值與表Y第C3列的所有可能匹配項,並將記錄標記爲匹配且不匹配表Y的第C4列?」

我相信你的例子是將表X中的第2列與表y中的列進行比較,但是這樣做或者只是改變列名。

注意我還沒有測試過這個,但應該讓你朝着正確的方向前進。

Update TableY 
Set Column4 = myComparison.myValue 
From (Select 
     TableY.Column1, 
     Case When (TableX.Column1 IS NULL) THEN 
      'N' 
     ELSE 'Y' END as MyValue 
    From TableY 
    Left Join TableX ON TableY.Column3 = TableX.Column3) myComparison 
Where myComparison.Column1 = Column1 
+0

從問題中不清楚,但基於他的示例,除了精確匹配外,解決方案需要將表Y中的總和與表X中的值進行比較,你的解決方案做什麼。 – BenV 2010-05-01 01:02:07

+0

它不工作.... 邏輯是匹配表X中的c3的值與表Y中的一個或多個c3的值的組合。 – user330015 2010-05-03 17:48:54

+0

我不認爲我理解這個問題,並且其他人無法理解。也許你可以稍微修改一下你的問題。 – 2010-05-03 20:25:36