我有3個表(1. Emp,2. OnLeave,3.DaysWeeks)。我試圖寫一個樞軸查詢displyas empname,並calenderdates列)SQL數據透視表查詢錯誤:未封閉的引號
當我嘗試運行數據透視查詢時出現跟隨錯誤。
1.在字符串'2016-12-31]))as pvt'後未使用引號。
2.Incorrect附近的語法 '2016年12月31日]))爲列兵'
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME([CalDate])
FROM DaysWeeks
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SELECT @query =
'WITH cte AS (
SELECT EmpDays.Employee,EmpDays.CalDate, ISNULL(v.VacationType,1) AS LeaveStatus
FROM dbo.OnLeave v
RIGHT OUTER JOIN
(SELECT e.EmpID AS Employee, dw.CalDate AS CalDate, dw.DayOfWeekName AS DoWName
FROM daysweeks dw,
dbo.Emp e
WHERE dw.CalYear = 2016 AND dw.monthnumber=1) AS EmpDays
ON
v.EmpID = EmpDays.Employee
AND v.StartingDate <= empdays.CalDate
AND v.EndingDate >= empdays.CalDate
)
SELECT * FROM cte PIVOT
(Max(cte.LeaveStatus) FOR cte.CalDate in([' + @cols + '])) as pvt'
EXEC SP_EXECUTESQL @query
只要試着打印'@ query'的值,看看它是否是正確的語法。你甚至可以手動執行'@ query'的內容來查看你缺少的內容 –
是的,我試圖運行,而不是@cols我通過了一個日期,然後它工作正常。但我的要求是我需要顯示一個月的所有日期= 1需要顯示爲列。 – Programmer2015
嘗試從查詢中刪除[],因爲日期已包含在[日期]中。所以你的進入('+ @cols +')。有關此更多信息,請參閱http://stackoverflow.com/questions/27422109/how-to-pivot-dynamically-with-date-as-column –