Как реализовать наилучшую логику сопоставления в TSQL (SQL Server 2000) - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть две таблицы X и Y:

Таблица 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 со всеми возможными совпадениями столбца C3 таблицы Y и пометить записи как совпадающие и не соответствующие в столбце C4 таблицы Y?

Возможные совпадения для A (то есть значение столбца C2 в таблице X) будет (где R - номер строки, т.е. значение столбца C1 в таблице Y):

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 Ответ

0 голосов
/ 30 апреля 2010

Вы заявили следующее

"Как сравнить значение столбца C3 в таблице X со всеми возможными совпадениями столбца C3 таблицы Y и пометить записи как совпадающие и не соответствующие в столбце C4 таблицы Y?"

Я полагаю, что в вашем примере столбец 2 в таблице X сравнивался со столбцом в таблице 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
...