2017-12-18 13 views
0

私は、次の形式で構造化されたデータを持っている:範囲の列方向の間で日付を表示する方法

+------------+-----------+-----------+ 
| Case_Number|Start_Date |End_Date | 
+------------+-----------+-----------+ 
|A1   | 12/1/2017 | 12/15/2017| 
|A2   | 12/12/2017| 12/28/2017| 

私は切り捨てになる第二のテーブルからの値を使用して列方向値に開始および終了データを変換するために期待していましたその値は週の初めまでです。たとえば、12/1/2017は、月曜日に相当する11/27/2017に切り捨てられます。この変換をやって、私は次の形式でデータを取得するために期待していた。

+----------------+-----------+ 
| Week Start Date|Case Number| 
+----------------+-----------+ 
|11/27/2017  | A1  | 
|12/4/2017  | A1  | 
|12/11/2017  | A2  | 
|12/18/2017  | A2  | 

私はケースが活動していることを各週の最初の月曜日を表示するように期待しています。指定された週に案件が終了した場合、その週を生成された2番目の表に表示したくありません。

+0

2番目の表の最初からどのように行くのかを具体的に記述してください。私はあなたの変換がどのように機能するかについての手がかりはありません。どこが '14/4/2017 | A1'から来た? –

+0

この日付は、その週の月曜日の切り捨て日付になります。私は年のすべての月曜日の日付を含むヘルパーテーブルを作成しました。したがって、その週に案件が終了していない限り、その週の月曜日の日付を2番目の表に表示するとします。 – Raptor776

+0

2つの別々の質問があるように見えます。 1つは日付を変換し、もう1つは表をUNPIVOTに変換します。私は別のトピックであるため、あなたには1つの質問のみをお勧めします –

答えて

1

毎週月曜日から始まると、あなたのヘルパー表でもその日プラス7日間別の列を持っていた場合、それは良いでしょうが、されていない場合、これは動作するはずです:

select datatable.case_number, helper.week_date 
from helper 
left join datatable on datatable.end_date >= helper.week_start 
    and datatable.start_date < dateadd('d',7,helper.week_start) 

注意は、このためのロジックが来ます「前に戻る」に見えるかもしれません日付

W1  w2 
s-E |  |  ignore 
s--|--------|-E 
    s-|---E |  
    s----E |  
    | s---E |  
    | s----E 
    |  s--|-E 
    |  | s-E ignore 
     s < w2 
     E >= W1 

その「イメージ」の最初と最後の行の関係が期間W1 to w2の関与を持っていないので、それらは無視されます。他のすべての行は期間W1 to w2に関与しているので、これらの条件すべてに対応したいが、他の条件には対応したくない。私たちが望むすべての位置s< w2であり、私たちが望むすべての位置E> W1ですが、それらの条件の1つを無視したいすべての行については真実ではありません。だから、私たちが望むすべての行について:s < w2 and E > W1

+0

ありがとう、明日の朝にこれを試してみてください! – Raptor776

+0

それは動作します、ありがとう! – Raptor776

関連する問題