2016-04-05 8 views
0

私は期間別に顧客の場所の履歴を追跡するテーブルを持っています。SQL Serverのデータをマージ

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

私はPeriodテーブルにすべてのピリオドのリストを持っています。私はこの結果を見るように、この2つのテーブルからデータを選択する方法はあります:

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がlag()ignore nullsオプションサポートされている場合のみ:

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

関連する問題