Хорошо, вот два решения.Проблема в том, что вы должны быть в состоянии определить, к какой двухнедельной неделе принадлежит TEDate, просто взглянув на TEDate, в противном случае вы должны определить либо список двухнедельных недель, либо указать свой запрос с чего начать.Для второго запроса вы должны указать любую дату начала двухнедельной недели, и она все равно должна работать.
DECLARE @bi_weeks TABLE
(
StartDate DATE,
EndDate DATE
);
INSERT INTO @bi_weeks VALUES
('20190317','20190330'),
('20190331','20190413'),
('20190414','20190427'),
('20190428','20190511'),
('20190512','20190525');
DECLARE @emp_data TABLE
(
EmployeeID INT,
TEDate DATETIME,
EmpFName NVARCHAR(100),
EmpLName NVARCHAR(100)
);
INSERT INTO @emp_data (EmployeeID ,EmpFName,EmpLName,TEDate) VALUES
(2019,'roz','Ahmad','2019-03-20'),
(2019,'roz','Ahmad','2019-04-01'),
(2019,'roz','Ahmad','2019-04-13'),
(2019,'roz','Ahmad','2019-04-23'),
(2019,'roz','Ahmad','2019-04-17'),
(2019,'roz','Ahmad','2019-04-29');
--This is the first way where we join to a list of known bi week start and end dates
SELECT ed.*, bw.*
FROM @emp_data ed
LEFT JOIN @bi_weeks bw ON ed.TEDate BETWEEN bw.StartDate AND bw.EndDate
ORDER BY 2
--This is the second way where we tell our query a known start date and then use it to
--calculate the rest of the start and end dates.
DECLARE @initial_bi_week_start_date DATE = '20190414';
With empdataCTE AS
(
SELECT *,
[initial_bi_week_start_date] = @initial_bi_week_start_date ,
[bi_week_start] =
DATEADD(DAY,
(DATEDIFF(DAY, @initial_bi_week_start_date, TEDate) / 14 +
IIF(TEDate < @initial_bi_week_start_date, 1, 0) * -1) * 14,
@initial_bi_week_start_date)
FROM @emp_data ed
)
SELECT *, DATEADD(DAY, 13, [bi_week_start]) [bi_week_end]
FROM empdataCTE;