2017-05-22 9 views
0

日付範囲からユニークな日付のリストを作成する方法:私が表Aのようなモーテルの日程で何千ものレコードを持っている

Name     CheckInDate   CheckOutDate 
    Pete     11/1/2016   11/1/2016 
    Mike     11/1/2016   11/2/2016 
    Don     11/1/2016   11/3/2016 

は、のすべての日のためのユニークなエントリを持つ一時テーブルを作成するクエリを作成する必要がありますゲストの訪問。このように:

Name      VisitDate 
Pete      11/1/2016 
Mike      11/1/2016 
Mike      11/2/2016 
Don       11/1/2016 
Don       11/2/2016 
Don       11/3/2016 

この1つは私を困惑させる。私はあなたの助けにあまり感謝します!

答えて

2

タリー/カレンダーテーブルには最適だろうが、あなたはそうのように適用されCROSSと協調してアドホック集計テーブルを経由してこれを行うことができます。

Select A.[Name] 
     ,VisitDate = B.D 
From YourTable A 
Cross Apply (
       Select Top (DateDiff(DD,[CheckInDate],[CheckOutDate])+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),[CheckInDate]) 
       From master..spt_values n1 
      ) B 

戻り値

Name VisitDate 
Pete 2016-11-01 
Mike 2016-11-01 
Mike 2016-11-02 
Don  2016-11-01 
Don  2016-11-02 
Don  2016-11-03 

編集 - あなたが持っている(またはしたい)場合はDateTable

Select A.[Name] 
     ,VistiDate = B.[Date] 
From YourTable A 
Join YourDateTable B 
    on B.[Date] between A.[CheckInDate] and A.[CheckOutDate] 
+0

こんにちはジョンを使用することができます。これは最高です。あなたの例から、私はあなたのテーブルを最初のソーステーブルに変更しました。私も "master..spt_values"を-isとしました。結果が生成され始めます。「TOPまたはFETCH句に無効な値が含まれています」というエラーにすぐに切り替えます。何かご意見は? – inefficientmkts

+0

@infficientmktsデータの問題が疑われます。 CheckInまたはCheckOutでNULLS? CheckOutはCheckIn未満ですか? –

+0

@ efficiencyfficientkkうん、あなたはNULLを持っています。ヌル値を強制することで、エラーを作成することができました。 –

0

は、あなただけの労働組合の個別の

​​

連合(EU)がかかりますケアだけでなく

+0

私が理解するように、OPは、各訪問者のための 'CheckInDate'から' CheckOutDate'までの全日リストを望んでいます –

+0

ああああ...私は気づかなかった –

関連する問題