2012-11-23 43 views
0

我想創建一個數據透視表如下SQL數據透視表無法正常工作

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

應該是'))AS pvt' –

+0

感謝Martin的快速反應。我剛剛發現了這個,但現在它說 Msg 107,Level 15,State 1,Line 6 列前綴't2'與查詢中使用的表名或別名不匹配。 Msg 107,Level 15,State 1,Line 6 列前綴't1'與查詢中使用的表名或別名不匹配。 –

+0

我只需要刪除t1。和t2。因爲這些是自我引用的,而不是指源表 –

回答

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作爲t1t2p子查詢的列列,而不是。

+0

@AndriyM感謝編輯。 :) – Taryn

+0

快樂是我的! –