Здравствуйте, у меня есть таблица, содержащая пробой сотрудника и выбирая данные из системы учета времени. Я хочу динамически поворачивать столбец данных перфоратора и суммировать диапазон смены сотрудников. Однако у меня возникают проблемы с динамическим стержнем. Я проверил пару других сообщений, но, похоже, я ничего не получаю.SQL Server Dynamic Pivot
Вот код:
USE wfcdb
DECLARE @cols as NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(VARCHAR(10),EVENTDTM,101)) as DATE FROM TIMESHEETITEM WHERE DATEDIFF(d,EVENTDTM,GetDate()) <7 ORDER BY DATE DESC
FOR XML PATH(''), TYPE
).value('.','NVARCHAR(MAX)')
,1,1,'')
Set @query='SELECT EEID, ' + @cols + 'FROM (
SELECT p.PERSONnum as EEID,p.FULLNM as FULLNM,
convert(varchar(10),ti.EVENTDTM,101) as PunchDate,
DATEDIFF(MINUTE,ti.enddtm,ti.startdtm)/60*-1 AS SPAN
FROM (((((
TIMESHEETITEM ti With (NoLock) LEFT JOIN
PUNCHEVENT pe With (NoLock) ON ti.STARTPUNCHEVENTID = pe.PUNCHEVENTID) LEFT JOIN
DATASOURCE ds ON pe.DATASOURCEID = ds.DATASOURCEID) LEFT JOIN
CLIENTCONTEXT cc ON ds.CLIENTCONTEXTID = cc.CLIENTCONTEXTID)
LEFT JOIN PUNCHEVENT AS pe1 With (NoLock) ON ti.ENDPUNCHEVENTID = pe1.PUNCHEVENTID) LEFT JOIN
DATASOURCE AS ds1 ON pe1.DATASOURCEID = ds1.DATASOURCEID) LEFT JOIN
CLIENTCONTEXT AS cc1 ON ds1.CLIENTCONTEXTID = cc1.CLIENTCONTEXTID
INNER JOIN PERSON p ON ti.EMPLOYEEID = p.PERSONID
INNER JOIN LABORACCT la1 ON la1.laboracctid = ti.laboracctid
WHERE DATEDIFF(d,ti.EVENTDTM,GetDate()) <7
AND ti.TmShtItemTypeID = 40
AND (isnull(cc.CLNT,'') + isnull(cc1.CLNT,''))<> '') X
PIVOT
(
SUM(SPAN)
FOR PunchDate in (' + @cols + ')
) p'
Execute(@query)
И вот это сообщение об ошибке я получаю:
Msg 105, Level 15, State 1, Line 17
Unclosed кавычки после того, как персонаж строка ') X PIVOT (.....) p'.
Msg 102, Level 15, State 1, Line 17
Неправильный синтаксис около «) X
PIVOT (.....
Любая помощь будет оценена.
Вы должны изменить эту строку: 'AND (isnull (cc.CLNT, '') + isnull (cc1.CLNT, '')) <> '') X', с этим:' AND (isnull (cc.CLNT, '' '') + isnull (cc1.CLNT, '' '')) <> '' '') X' – Lamak