2015-08-27 100 views
0

這是我的季節和價格表。酒店預訂季節日期之間的總價格

版本MSSQL Server 2012的

下面是表結構 enter image description here

user date input   
BeginDate : 2015-01-13  2 day 2*2 =4 
EndDate : 2015-01-18  3 day 3*2= 6 
Total Price       = 10 

日期範圍之間的總價格(如酒店預訂季節); 例如SQL查詢:

declare @DateStart date ='2015-01-13';declare @DateEnd date ='2015-01-18'; 
select *from Season s 
    inner join Price p on p.SeasonID=s.SeasonID 
    WHERE (@DateStart BETWEEN s.BeginDate AND s.EndDate 
     OR @DateEnd BETWEEN s.BeginDate AND s.EndDate 
     or s.BeginDate BETWEEN @DateStart AND @DateEnd 
     or s.EndDate BETWEEN @DateStart AND @DateEnd) 
     and s.RoomID=1 

如何計算總價格與我的日期範圍是多少?

+1

這是一個很好的開始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

你的例子很模糊和混亂。 – FutbolFan

+0

對不起@FutbolFan我不明白這個問題 – enc0der

回答

0

您需要爲我們提供一個更大的數據集和更多的示例,以幫助您使此查詢更加穩固。但問題的核心是要計算每次住宿每天有多少天在SeasonID。試試這個:

DECLARE @BeginDate date = '2015-01-13' 
DECLARE @EndDate date = '2015-01-18' 

;WITH 
    tmp AS 
    (
     SELECT S.SeasonID, 
       StayBeginDate = IIF(@BeginDate > S.BeginDate, @BeginDate, BeginDate), 
       StayEndDate = IIF(@EndDate > S.EndDate, S.EndDate, @EndDate) 
     FROM Season S 
     WHERE @BeginDate BETWEEN S.BeginDate AND S.EndDate 
      OR @EndDate BETWEEN S.BeginDate AND S.EndDate 
    ) 

SELECT  tmp.SeasonID, tmp.StayBeginDate, tmp.StayEndDate, 
      DayCount = DATEDIFF(DAY, tmp.StayBeginDate, tmp.StayEndDate), 
      Cost  = P.Price * DATEDIFF(DAY, tmp.StayBeginDate, tmp.StayEndDate) 
FROM  tmp 
INNER JOIN Price P ON tmp.SeasonID = P.SeasonID 

我相信你知道如何總結整個住宿的總費用。

+0

謝謝你Zoff Dino我叫 – enc0der

+0

感謝成功的結果 – enc0der