안녕하세요. 직원이 펀치 인을 포함하고 계시 시스템의 데이터를 펀치 아웃하는 테이블이 있습니다. 동적으로 펀치 데이터 열을 피벗하고 직원 이동 범위를 합산하려고합니다. 그러나 동적 피벗 문제가 있습니다. 나는 몇 개의 다른 지위를 조사했다. 그러나 나는 어디에도 가지 않는 것처럼 보인다. 여기 SQL Server 동적 피벗
코드입니다 : 여기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)
그리고 나는 오류 메시지가 나타날 수 있습니다 :
메시지 105, 수준 15, 상태 1, 줄 17
닫히지 않은 인용 부호 문자가 후 문자열 ') X PIVOT (.....) p'.
메시지 102, 수준 15, 상태 1, 줄 17
근처의 구문이 잘못되었습니다 ') X
PIVOT (.....
어떤 도움을 주시면 감사하겠습니다.
다음과 같이 변경해야합니다. 'AND (isnull (cc.CLNT,' ') + isnull (cc1.CLNT,' ')) <>' ') X' isnull (cc.CLNT, '' ') + isnull (cc1.CLNT,' '' ')) <>' '' ') X' – Lamak