SQL PIVOT表无法正常工作

时间:2012-11-23 16:54:25

标签: sql-server-2008 pivot

我正在尝试创建一个数据透视表,如下所示

SELECT AttributeDataID, [0],[1],[10],[131],[132],[133],[134],[135],[136],[137],[138],[139],[140],[141],[142],[143],[144],[145],[146],[147],[148],[149],[150],[151],[152],[153],[154],[155],[157],[158],[159],[160],[161],[162],[163],[164],[165],[166],[167],[168],[169],[170],[171],[172],[173],[174],[175],[176],[177],[178],[179],[180],[181],[182],[183],[184],[185],[186],[187],[188],[189],[190],[191],[192],[193],[194],[195],[196],[197],[198],[199],[2],[200],[202],[203],[204],[205],[206],[207],[208],[209],[211],[212],[213],[214],[215],[216],[217],[218],[219],[220],[221],[222],[223],[224],[225],[226],[227],[228],[229],[230],[231],[232],[233],[234],[235],[236],[237],[238],[239],[240],[241],[242],[243],[244],[245],[246],[247],[248],[250],[251],[252],[3],[4],[43],[44],[5],[6],[7],[8],[85],[86],[9]
FROM (SELECT t2.AttributeDataID, t1.AttributeName, t2.DataValue 
      FROM AttributeDefinitions As t1 JOIN AttributeDatum AS t2 ON t1.AttributeDefinitionId = t2.AttributeDefinitionRef) 
p PIVOT (max(t2.DataValue) FOR t1.AttributeName IN 
     ([0],[1],[10],[131],[132],[133],[134],[135],[136],[137],[138],[139],[140],[141],[142],[143],[144],[145],[146],[147],[148],[149],[150],[151],[152],[153],[154],[155],[157],[158],[159],[160],[161],[162],[163],[164],[165],[166],[167],[168],[169],[170],[171],[172],[173],[174],[175],[176],[177],[178],[179],[180],[181],[182],[183],[184],[185],[186],[187],[188],[189],[190],[191],[192],[193],[194],[195],[196],[197],[198],[199],[2],[200],[202],[203],[204],[205],[206],[207],[208],[209],[211],[212],[213],[214],[215],[216],[217],[218],[219],[220],[221],[222],[223],[224],[225],[226],[227],[228],[229],[230],[231],[232],[233],[234],[235],[236],[237],[238],[239],[240],[241],[242],[243],[244],[245],[246],[247],[248],[250],[251],[252],[3],[4],[43],[44],[5],[6],[7],[8],[85],[86],[9]) 
      AS pvt ORDER BY AttributeDataID;

但是正在返回以下消息。有人可以帮忙吗?

Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'AS'.

感谢。

1 个答案:

答案 0 :(得分:2)

您无法在PIVOT

中使用内部查询中的别名
SELECT AttributeDataID, [0],[1],[10],[131],[132],[133],[134],[135],[136],[137],[138],[139],[140],[141],[142],[143],[144],[145],[146],[147],[148],[149],[150],[151],[152],[153],[154],[155],[157],[158],[159],[160],[161],[162],[163],[164],[165],[166],[167],[168],[169],[170],[171],[172],[173],[174],[175],[176],[177],[178],[179],[180],[181],[182],[183],[184],[185],[186],[187],[188],[189],[190],[191],[192],[193],[194],[195],[196],[197],[198],[199],[2],[200],[202],[203],[204],[205],[206],[207],[208],[209],[211],[212],[213],[214],[215],[216],[217],[218],[219],[220],[221],[222],[223],[224],[225],[226],[227],[228],[229],[230],[231],[232],[233],[234],[235],[236],[237],[238],[239],[240],[241],[242],[243],[244],[245],[246],[247],[248],[250],[251],[252],[3],[4],[43],[44],[5],[6],[7],[8],[85],[86],[9]
FROM 
(
  SELECT t2.AttributeDataID, t1.AttributeName, t2.DataValue 
  FROM AttributeDefinitions As t1 
  JOIN AttributeDatum AS t2 
    ON t1.AttributeDefinitionId = t2.AttributeDefinitionRef
)p 
PIVOT 
(
  max(DataValue) -- < no inner query alias here
  FOR AttributeName IN  -- < no inner query alias here
     ([0],[1],[10],[131],[132],[133],[134],[135],[136],[137],[138],[139],[140],[141],[142],[143],[144],[145],[146],[147],[148],[149],[150],[151],[152],[153],[154],[155],[157],[158],[159],[160],[161],[162],[163],[164],[165],[166],[167],[168],[169],[170],[171],[172],[173],[174],[175],[176],[177],[178],[179],[180],[181],[182],[183],[184],[185],[186],[187],[188],[189],[190],[191],[192],[193],[194],[195],[196],[197],[198],[199],[2],[200],[202],[203],[204],[205],[206],[207],[208],[209],[211],[212],[213],[214],[215],[216],[217],[218],[219],[220],[221],[222],[223],[224],[225],[226],[227],[228],[229],[230],[231],[232],[233],[234],[235],[236],[237],[238],[239],[240],[241],[242],[243],[244],[245],[246],[247],[248],[250],[251],[252],[3],[4],[43],[44],[5],[6],[7],[8],[85],[86],[9]) 
) AS pvt 
ORDER BY AttributeDataID;

只是为了说清楚:可以PIVOT引用的列添加表别名前缀。只是在你的情况下,它只能是p别名,即

…
max(p.DataValue)
FOR p.AttributeName IN
…

因为被转动的列被PIVOT称为p子选择的列,而不是t1t2的列。