2016-04-05 2 views
0

У меня есть таблица, которая отслеживает историю местоположения клиента по периоду. Это выглядит следующим образом:Объединить данные в SQL Server

CusID Location Period 
1  SYD  201501 
1  MEL  201504 
1  SYD  201506 

У меня есть Period таблицу со списком всех периодов. Есть ли способ, чтобы выбрать данные из этих двух таблиц, так что я вижу этот результат:

CusID Location Period 
1  SYD  201501 
1  SYD  201502 
1  SYD  201503 
1  MEL  201504 
1  MEL  201504 
1  SYD  201506 
+0

Что вы пробовали? Вы можете изменить свой вопрос, чтобы добавить эту информацию, а также результаты. – Theresa

ответ

0

Если только SQL Server поддерживает опцию ignore nulls на lag():

select cl.cusid, p.period, 
     lag(cl.location ignore nulls) over (partition by cusid order by period) 
from period p cross join 
    customerlocation cl 
    on cl.period = p.period; 

Но это не так. Один метод использует `внешняя применяются:

select c.cusid, p.period, cl.location 
from period p cross join 
    (select distinct cusid from customerlocation) c outer apply 
    (select top 1 cl.* 
     from customerlocation cl 
     where cl.period <= p.period and cl.cusid = c.cusid 
     order by cl.period desc 
    ) cl; 

Если у вас есть таблица клиентов, то вы можете использовать, что вместо второго подзапроса (для c).

+0

Спасибо, Гордон. Это отлично работает для меня. – ArunPaluru