日期:2014-05-17  浏览次数:20533 次

pivot
orderid 是int类型
display_item 是varchar类型
为什么我将display_item作为列名就可以,而将orderid作为列名则出错?

以下是display_item作为列名
select * from (select project,display_item,orderid from design_bom_displayformat) a 
pivot (max(orderid) for display_item
 in (area,module,specialty)) b

以下是orderid作为列名,会报错
select * from (select project,display_item,orderid from design_bom_displayformat) a 
pivot (max(display_item) for orderid
 in (1,2,3)) b
错误信息为:
消息 102,级别 15,状态 1,第 3 行
'1' 附近有语法错误。

------最佳解决方案--------------------
SELECT  *
FROM    ( SELECT    project ,
                    display_item ,
                    orderid
          FROM      design_bom_displayformat
        ) a PIVOT ( MAX(display_item) FOR orderid IN ( [1], [2], [3] ) ) b

联机丛书的语法:你可以看到是要加[]的。不用管为什么,记住就好了
PIVOT

(

    <聚合函数>(<要聚合的列>)

FOR

[<包含要成为列标题的值的列>]

    IN ( [第一个透视的列], [第二个透视的列],

    ... [最后一个透视的列])

) AS <透视表的别名>


------其他解决方案--------------------
select * from (select project,display_item,orderid from design_bom_displayformat) a 
 pivot (max(display_item) for orderid
  in ([1],[2],[3])) b
------其他解决方案--------------------
引用:
select * from (select project,display_item,orderid from design_bom_displayformat) a 
 pivot (max(display_item) for orderid
  in ([1],[2],[3])) b

能给我说下为什么吗??谢谢
------其他解决方案--------------------
引用:
SQL code



123456

SELECT  * FROM    ( SELECT    project ,                     display_item ,                     orderid           FROM      design_bom_displayformat         ) a PIVOT ( MAX(di……

太感谢了!!!