Как разделить доход по дням между двумя месяцами - PullRequest
0 голосов
/ 29 марта 2019

В нашей системе групповые бронирования проводятся в виде блоков.Я могу получить общий доход, удерживаемый в блоке на группу, по дате прибытия и отъезда.Проблема заключается в том, что доход в расчете на группу - это общий показанный доход, полученный в течение всего периода, в течение которого спальни были заблокированы.Это было бы хорошо, если бы каждая группа прибыла и уехала в один и тот же месяц.Однако есть группы, которые прибывают через месяц и уходят в следующем месяце.Мне нужно разделить доход для этих групп по месяцам.Так, например, если группа прибывает 28/06 и уезжает 3/07, мне нужно знать, какая часть этого дохода генерируется в июне (3 ночи) и сколько в июле (2 ночи).Приведенный ниже запрос является верным, но он даст мне общий доход на основе EndDate (дата выезда), поэтому доход будет идти в месяц, когда группа покидает группу.Я также сравниваю то же самое время в прошлом году

SELECT DAILYREV = ProjectedRevenueAccomNett/ DATEDIFF(Day,BeginDate, EndDate), DATEDIFF(DAY,BeginDate, EndDate) AS StayNights, Year(BeginDate) ArrivalYear, GroupRef, GAStatus, SourceSiteId, BeginDate, EndDate, CreatedTimestamp, DefMarketSegmentCode,ProjectedRevenueAccomNett, ProjectedRevenueFBNett

From SyncGroupRoomBlockHeaders
WHERE  CreatedTimestamp <= '2019-03-28' 
  AND  BeginDate BETWEEN '2019-03-28' AND '2019-12-31'
or
  CreatedTimestamp <= '2018-03-28' 
  AND  BeginDate BETWEEN '2018-03-28' AND '2018-12-31'


  Order By YEAR (BeginDate)

1 Ответ

0 голосов
/ 29 марта 2019

Ваш вопрос можно интерпретировать по-разному. Я думаю, что следующий запрос укажет вам правильное направление. Может быть, вы можете использовать этот подход и отредактировать его под свои нужды:

USE TEMPDB

IF OBJECT_ID ('TEMPDB..Bookings') IS NOT NULL DROP TABLE Bookings;
CREATE TABLE Bookings (ID INT, 
                   StartDate DATE, 
                   EndDate Date, 
                   Total DECIMAL (8,2), 
                   NumberDays AS DATEDIFF (DAY, StartDate, EndDate))
INSERT INTO Bookings VALUES (1, '20190130', '20190202', 210.15)

IF OBJECT_ID ('TEMPDB..BookingNew') IS NOT NULL DROP TABLE BookingNew;
SELECT *, Total / NumberDays AS PricePerDay 
INTO BookingNew
FROM Bookings



DECLARE @StartDate DATE
DECLARE @EndDate DATE

SET @StartDate = '2000-01-01' -- <<  user input >>
SET @EndDate  = '2040-12-31'  -- <<  user input >>

IF OBJECT_ID ('TEMPDB..#Date') IS NOT NULL DROP TABLE #Date
IF OBJECT_ID ('TEMPDB..#Date') IS NULL CREATE TABLE #Date (Date DATE)

INSERT INTO #Date VALUES (@StartDate)

WHILE @StartDate < @EndDate

BEGIN
INSERT INTO #Date

SELECT DATEADD (DD, 1, @StartDate) AS Date

SET @StartDate = DATEADD (DD, 1, @StartDate)

END

SELECT * 
FROM #Date AS D
INNER JOIN BookingNew AS B ON D.Date BETWEEN B.StartDate AND B.EndDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...