2016-04-05 14 views
0

Müşteri konumunun geçmişini belirli bir süre izleyen bir tablom var. Bu şuna benzer: Verileri SQL Server'da birleştirme

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

tüm dönemlerin listesini içeren bir Period tablo var.

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

Şimdiye kadar neler denediniz? Bu bilgileri ve sonuçları eklemek için sorunuzu düzenleyebilirsiniz. – Theresa

cevap

0

sadece SQL Server lag() üzerinde ignore nulls seçeneği destekliyorsa: Ben bu sonucu görebilmeniz için bu iki tablodaki verileri seçmek için herhangi bir yolu var mı,

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; 

Ama öyle değil.

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; 

Müşterilerin bir tablo varsa, o zaman (c için) yerine ikinci alt sorgunun kullanabiliriz: Bir yöntem dış uygulamak `kullanır.

+0

Teşekkür ederim Gordon. Bu benim için mükemmel çalışıyor. – ArunPaluru

İlgili konular