Sql server 消息102,第15级,状态1,第9行'附近语法不正确;('-

Sql server 消息102,第15级,状态1,第9行'附近语法不正确;('-,sql-server,pivot,Sql Server,Pivot,我正在SQL Server 2008中处理一个交叉表查询。除了我遇到的这个错误之外,所有的事情看起来都很好 这是我的密码: select * from (select ITEM_CODE,NET_PRODUCTION_QUANTITY,RAW_MATERIAL_CODE,DATE_ID from dbo.ODST_PRODUCTION_TRANS ) n pivot (sum(NET_PRODUCTION_QUANTITY) for datename(mon

我正在SQL Server 2008中处理一个交叉表查询。除了我遇到的这个错误之外,所有的事情看起来都很好

这是我的密码:

select * from 
    (select ITEM_CODE,NET_PRODUCTION_QUANTITY,RAW_MATERIAL_CODE,DATE_ID  from dbo.ODST_PRODUCTION_TRANS 
    ) n
    pivot
    (sum(NET_PRODUCTION_QUANTITY) for datename(month,DATE_ID) In ([January],[February],[March],[April],[May],[June])) as pvt
where RAW_MATERIAL_CODE = 'X' and DATE_ID between '01-Jan-11' and '30-Jun-11'.
问题是
datename(month,date\u id)
在哪里,但我想不出来。有人能给我一个解决方案吗

提前感谢

试试看

select * from 
    (select ITEM_CODE,NET_PRODUCTION_QUANTITY,RAW_MATERIAL_CODE,DATE_ID, datename(month,DATE_ID) as Month from dbo.ODST_PRODUCTION_TRANS 
    ) n
    pivot
        (
            sum(NET_PRODUCTION_QUANTITY) 
            for Month 
            In ([January],[February],[March],[April],[May],[June])
        ) as pvt
where RAW_MATERIAL_CODE = 'X' and DATE_ID between '01-Jan-11' and '30-Jun-11'

我认为pivot不喜欢datename表达式,因此我将其移动到查询中。

它应该是这样的:

select * from         
        (select ITEM_CODE,NET_PRODUCTION_QUANTITY,RAW_MATERIAL_CODE,DATE_ID,datename(month,[DATE_ID]) as dtt 
from dbo.ODST_PRODUCTION_TRANS) as n
       pivot

            (
        sum(NET_PRODUCTION_QUANTITY) 
        for [dtt] IN ([January],[February],[March],[April],[May],[June])) as pvt 
        where RAW_MATERIAL_CODE = 'X' and DATE_ID between '01-Jan-11' and '30-Jun-11'

我不认为pivot的FOR部分可以是pivot时的计算值,它必须在结果集中

select * from 
    (select ITEM_CODE,NET_PRODUCTION_QUANTITY,RAW_MATERIAL_CODE,DATE_ID,datename(month,DATE_ID) as dn  from dbo.ODST_PRODUCTION_TRANS 
    ) n
    pivot
    (sum(NET_PRODUCTION_QUANTITY) for dn In ([January],[February],[March],[April],[May],[June])) as pvt
where RAW_MATERIAL_CODE = 'X' and DATE_ID between '01-Jan-11' and '30-Jun-11'

你是对的,它应该在查询中。非常感谢你的回答