Sql Inner Присоединяйтесь к первой записи, только если Exists Take Next - PullRequest
3 голосов
/ 07 декабря 2011

Это поддержка для меня.Я могу выполнить внутреннее объединение только с первым результатом, но если он существует, я хочу взять второй результат.

ЭТО МОЯ ТАБЛИЦА A

ID NAME VALUE
1   A     123
2   B     456
3   C     789
4   A     456

TABLE B

BID BNAME BVALUE
1    A     ABC
2    A     CDE
3    B     845
4    C     1234

МОЙ ВЫБОР SQL:

SELECT * FROM A
CROSS APPLY (
    SELECT TOP 1 * 
        FROM B

    WHERE A.Name = B.BName 

) BB

Возвращается

1   A     123  1   A   ABC
2   B     456  3   B   845
3   C     789  4   C   1234
4   A     456  1   A   ABC

Пожалуйста, помогите, я хочу получить такой результат:

1   A     123  1   A   ABC
2   B     456  3   B   845
3   C     789  4   C   1234
4   A     456  2   A   CDE

Я принимаю таблицу tmp и любой запрос(

1 Ответ

3 голосов
/ 07 декабря 2011

После разъяснения в комментариях, что обе таблицы всегда будут иметь совпадающие строки.

WITH A
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY ID) AS RN
         FROM   TableA),
     B
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY BNAME ORDER BY BID) AS RN
         FROM   TableB)
SELECT A.ID,
       A.NAME,
       A.VALUE,
       B.BID,
       B.BNAME,
       B.BVALUE
FROM   A
       JOIN B
         ON A.NAME = B.BNAME
            AND A.RN = B.RN  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...