SQL Сервер заменяет пустые значения во внешнем соединении - PullRequest
0 голосов
/ 14 апреля 2020

Я объединяю две таблицы с помощью внешнего соединения.

SELECT
    T1.DATE, 
    T2.DATE, 
    COALESCE(T2.ID, -1), 
FROM Table1 as T1
LEFT JOIN TABLE2 as T2 ON t1.date = t.date;

Пример результата:

TABLE1.DATE =  03/15  03/16   03/17     03/18    03/19   03/30
TABLE2.DATE =  NULL   03/16   03/17     NULL     NULL    03/20
TABLE2.ID   =  -1     20      30        -1       -1      40

Ищем способ заменить -1 на значения из самых последних match.

IE 3/15, дата будет NULL, но 03/16 мне нужно установить идентификатор на основе данных за 03/16 и заполнить значение 20 для 15/03 и 03/16 .

Затем снова 03/20 мне нужно заполнить значение 40 на 03/18, 03/19 и 03/20.

1 Ответ

0 голосов
/ 14 апреля 2020

Я думаю, что вы хотите outer apply вместо:

SELECT T1.DATE, T2.DATE as effective_date,
       T2.ID
FROM Table1 T1 OUTER APPLY
     (SELECT TOP (1) T2.*
      FROM TABLE2 as T2
      WHERE t1.date <= t.date
      ORDER BY t2.date DESC
     ) T2;

Обратите внимание, что второй столбец возвращает дату, связанную с id, а не совпадает с датой t1.

...