SQL pivot查询错误:未闭合的引号

时间:2016-01-27 06:55:23

标签: sql sql-server pivot

我有3张桌子(1.Emp,2。OnLeave,3.DaysWeeks)。我试图编写一个透视查询,其中显示了empname,并将日历更改为列)

当我尝试运行数据透视查询时,我收到以下错误。

1.字符串后面的未标记引号" 2016-12-31]))作为pvt'。

2. <2016; 2016-12-31附近的语法不正确)))作为pvt&#39;

    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

1 个答案:

答案 0 :(得分:1)

由于此处已添加$('#TopicWords').click(function() { $('#message').fadeIn('fast').text('Clicked').fadeOut('slow'); })

forfiles -p "C:\yourbackupfolder" -s -m *.* -d 20 -c "cmd /c del @file"

此处您不需要QUOTENAME STUFF((SELECT ',' + QUOTENAME([CalDate])

[

这是错误的。它将整个透视列列表视为单列

将其更改为

]

更新:通过传递 FOR cte.CalDate in([' + @cols + '])) as pvt' 值(@deptId为smallint = 1)来过滤记录。像这样更改您的查询

 FOR cte.CalDate in(' + @cols + ')) as pvt'
相关问题