Как использовать условие case when в сводном запросе?
у меня есть два запроса ,один-Pivot, а другой-case when, теперь я хочу объединить их ..plz guide
Что я уже пробовал:
SELECT DISTINCT ReportingDate, SUM(CASE WHEN status = 'P' THEN 1 WHEN status = 'HD' THEN 0.5 WHEN status = 'A' THEN 0 END) AS [T.P], SUM(CASE WHEN status = 'A' THEN 1 WHEN status = 'HD' THEN 0.5 END) AS [A], SUM(CASE WHEN status = 'P' THEN 1 WHEN status = 'HD' THEN 1 WHEN status = 'A' THEN 1 END) AS [TDay ] INTO #Dates FROM EmployeesAttendance ORDER BY ReportingDate DECLARE @cols NVARCHAR(4000) SELECT @cols = COALESCE(@cols + ',[' + CONVERT(varchar, DATEPART(DAY, ReportingDate), 112) + ']','[' + CONVERT(varchar,DATEPART(DAY, ReportingDate), 112) + ']') FROM #Dates ORDER BY ReportingDate DECLARE @qry NVARCHAR(4000) = N'SELECT * FROM (SElECT EmployeeDetails.EmpID,EmployeeDetails.EmpName,EmployeesAttendance.Status, DATEPART(DAY, EmployeesAttendance.ReportingDate)as DDate FROM EmployeesAttendance Inner Join EmployeeDetails on EmployeesAttendance.EmpID=EmployeeDetails.Empid )emp PIVOT (MAX(Status) FOR DDate IN (' + @cols + ')) AS stat ' -- Executing the query EXEC(@qry)
CHill60
Предоставьте примеры данных для таблиц, которые вы использовали, и покажите нам результаты, которые вы ожидаете от "слияния"
Member 12314309
вот моя таблица employeeattendance
Создайте таблицу [dbo].[EmployeesAttendance](
[AttIDS] [int] IDENTITY(1,1) NOT NULL,
[EmpID] [int] NULL,
[ReportingDate] [дата] NULL,
[Дата] [дата] NULL,
[INTIME] [datetime] NULL,
[OUTTIME] [datetime] NULL,
[Часы] [int] NULL,
[Дни] [int] NULL,
[OT] [int] NULL,
[OTAmount] [int] NULL,
[Время] [время](7) ноль,
[Late] [int] NULL,
[Status] [varchar](50) NULL,
вот моя таблица отпусков сотрудников
Создайте таблицу [dbo].[EmpApplication](
[AppNo] [int] IDENTITY(1,1) NOT NULL,
[EmpID] [int] NULL,
[ApplyingDate] [дата] NULL,
[LeavFrom] [дата] NULL,
[LeavTo] [дата] NULL,
[leavDay] [int] NULL,
[LeaveTypeId] [int] NULL,
вот моя сводная таблица регистра посещаемости для отображения cols в строки из таблицы посещаемости сотрудников
Изменить процедуру [dbo].[Pivot_Attendance]
@StartDate Дата,
@Дата Окончания Срока Действия
Как
Начать
Выберите DISTINCT ReportingDate в #Dates
Из EmployeesAttendance
Где (ReportingDate между @StartDate и @Enddate)
Заказ по отчетной дате
Объявить @cols NVARCHAR(4000)
Выберите @седла = КОАЛЕСЦИРУЮТ(@гуара + ',[' + конвертировать(тип varchar, функция datepart(день, ReportingDate), 112)
+ ']','[' + CONVERT(varchar,DATEPART(DAY, ReportingDate), 112) + ']')
От даты #
Заказ по отчетной дате
вот мой окончательный вывод, который я хочу получить в сводной таблице
я хочу этот выход
Дата (будет приходить в соответствии с двумя параметрами даты)
Дата 1,2,3,4,5,6 общий день отсутствия настоящий отпуск
emp 1 p,p,p,p,A,A 6 2 4 0
emp 2 L,P,P,A,L,P 6 1 3 2
пожалуйста, направьте спасибо... @CHILL60