2011-07-29 68 views
1

我有以下查询错误枢轴查询

DECLARE @query NVARCHAR(4000) 
DECLARE @Days NVARCHAR(4000) 
SELECT @Days = STUFF((SELECT DISTINCT 
         '],[' + ltrim(str(datepart(dw,visitdate))) 
         FROM mktPlanHospitals 
         ORDER BY '],[' + ltrim(str(datepart(dw,visitdate))) 
         FOR XML PATH('')      ), 1, 2, '') + ']' 

SET @query = 
'SELECT * FROM 
(
    SELECT DoctorID,datepart(dw,visitdate),DoctorID 
    FROM mktPlanHospitals 
)t 
PIVOT (SUM(DoctorID) FOR datepart(dw,visitdate) 
IN ('[email protected]+')) AS pvt' 

EXECUTE (@query) 

这是给我的错误

Incorrect syntax near '('. 

回答

2

你不能在你的SELECT不指定字段顺序,如果你使用的DISTINCT关键词。一个不同的值可以有几个值来排序,因此可能没有正确的顺序。

Blog entry关于错误。

+0

我下面从http://dotnetgalactics.wordpress.com/2009/10/23/using-sql-server-20052008-pivot后的问题-on-未知数柱动态枢轴的。我怎么能修改得到resut – Tassadaque

+0

我会删除ORDER BY中的YEAR()函数,我不认为这需要在那里。 – Jacob

+0

感谢您的回复。我更新了查询并获得错误的语法错误。请参阅更新的问题 – Tassadaque

1

这里是工作查询解决

DECLARE @query NVARCHAR(4000) 
DECLARE @Days NVARCHAR(4000) 
SELECT @Days = STUFF((SELECT DISTINCT 
         '],[' + ltrim(str(datepart(dw,visitdate))) 
         FROM mktPlanHospitals 
         ORDER BY '],[' + ltrim(str(datepart(dw,visitdate))) 
         FOR XML PATH('')      ), 1, 2, '') + ']' 

SET @query = 
'SELECT * FROM 
(
    SELECT DoctorID,datepart(dw,VisitDate) as vdate 
    FROM mktPlanHospitals 
)t 

PIVOT (SUM(DoctorID) FOR vdate 
IN ('[email protected]+')) AS pvt' 

EXECUTE (@query)