Вы не можете изменить имя столбца без динамического sQL (что усложняет вопросы). Вот еще одно предложение: что вы изменить таблицу дат включает название дня недели, как это:
CREATE TABLE DaysWeeks
(CalYear SMALLINT NOT NULL,
WeekNumber TINYINT NOT NULL,
CalDate DATE NOT NULL,
DayOfWeekNumber TINYINT,
DayOfWeekName VARCHAR(9)
CONSTRAINT PK_DaysWeeks PRIMARY KEY CLUSTERED (CalYear, WeekNumber, CalDate)
)
со значениями вроде этого:
INSERT INTO dbo.DaysWeeks
(CalYear, WeekNumber, CalDate,DayOfWeekNumber,DayOfWeekName)
VALUES (2016, 4, '01/24/2016',1,'Sunday'),
(2016, 4, '01/25/2016',2,'Monday'),
(2016, 4, '01/26/2016',3,'Tuesday'),
(2016, 4, '01/27/2016',4,'Wednesday'),
(2016, 4, '01/28/2016',5,'Thursday'),
(2016, 4, '01/29/2016',6,'Friday'),
(2016, 4, '01/30/2016',7,'Saturday')
Теперь вы можете иметь запрос, который вращается на основе дня недели:
WITH cte AS (
SELECT EmpDays.Employee, EmpDays.CalDate, EmpDays.DoWName, ISNULL(v.Leave_Type,'Available') AS Available
FROM dbo.On_Vacation v
RIGHT OUTER JOIN
(SELECT e.EmpID AS Employee, dw.CalDate AS CalDate, dw.DayOfWeekName AS DoWName
FROM dbo.DaysWeeks dw,
dbo.Employee e
WHERE dw.CalYear = 2016 AND dw.WeekNumber = 4) AS EmpDays
ON
v.EmpID = EmpDays.Employee
AND v.StartingFrom <= empdays.CalDate
AND v.EndingTo >= empdays.CalDate
)
SELECT * FROM cte
PIVOT (MAX(cte.Available) FOR DoWName IN (['Sunday'],['Monday'],['Tuesday'],['Wednesday'],['Thursday'],['Friday'],['Saturday'])
Если вы действительно нужны фактические даты в ваших колонках я отрегулировал бы это использовать динамический SQL. Но прежде чем это сделать (что, IMHO, делает код намного сложнее читать и поддерживать, а не то, что это так просто), я бы спросил, как вы собираетесь представлять данные и, следовательно, может ли это быть обработано в отчете или уровень представления.
Создайте реальную или динамическую таблицу календаря (по одной строке на дату), а затем присоедините ее к таблице праздничных дней. После того, как у вас есть результаты, вы можете развернуть его в разные макеты. –
Спасибо, Джеймс. Но мне нужны даты в виде столбцов? – Programmer2015
Это то, что точка для –