2017-05-22 66 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 

這一個讓我難住。我非常感謝你的幫助!

回答

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

@inefficientmkts我懷疑數據問題。 NULLS在CheckIn或CheckOut? CheckOut少於CheckIn? –

+0

@inefficientmkts是的,你有NULL。通過強制一個空值,我能夠創建你的錯誤。 –

0

只需使用工會

​​

聯盟將照顧不同以及

+0

據我所知,OP希望從CheckInDate到CheckOutDate每個訪客的日子清單 –

+0

哦gotcha ...我沒有注意到 –