Sql server 如何在我的SQL dynamic Pivot查询中为这行代码编写正确的语法?

Sql server 如何在我的SQL dynamic Pivot查询中为这行代码编写正确的语法?,sql-server,dynamic,syntax,pivot,Sql Server,Dynamic,Syntax,Pivot,我在SQL Server 2014上运行了一个动态pivot查询。这是我的原始查询,运行良好: DECLARE @sql NVARCHAR(max), @cols VARCHAR(max) SET @cols = (SELECT DISTINCT a.FOC_TRANSACTIONCODE + ',' FROM P5FOLIOCHARGE a LEFT JOIN P5FOLIOHEADER b

我在SQL Server 2014上运行了一个动态pivot查询。这是我的原始查询,运行良好:

DECLARE @sql  NVARCHAR(max),
        @cols VARCHAR(max)

 SET @cols = (SELECT DISTINCT a.FOC_TRANSACTIONCODE + ','
              FROM   P5FOLIOCHARGE a
                    LEFT JOIN P5FOLIOHEADER b
                           ON a.FOC_ACCOUNT = b.FOH_ACCOUNT
             WHERE  b.FOH_PMSCONFIRMATIONNUMBER = '39576189-1'
             AND FOC_NETAMOUNT NOT LIKE '-%'
             FOR xml path(''))

 SELECT @cols = LEFT(@cols, Len(@cols) - 1)

 SET @sql = 'SELECT *
         FROM   (SELECT b.FOH_PMSCONFIRMATIONNUMBER,
                   a.FOC_ACCOUNT,
                   a.FOC_PROPERTY,
                   a.FOC_DATE,
                   a.FOC_TRANSACTIONCODE,
                       CASE WHEN a.FOC_NETAMOUNT > 0 THEN a.FOC_NETAMOUNT   ELSE 0 END AS FOC_NETAMOUNT
                FROM P5FOLIOCHARGE a
                     LEFT JOIN P5FOLIOHEADER b ON a.FOC_ACCOUNT = b.FOH_ACCOUNT
                where b.FOH_PMSCONFIRMATIONNUMBER = ''39576189-1'' 
                AND FOC_NETAMOUNT NOT LIKE ''-%'')a
                PIVOT (Sum(FOC_NETAMOUNT)
                 FOR FOC_TRANSACTIONCODE IN (' + @cols + ')) pv '

EXEC Sp_executesql @sql 
我现在对它进行了一些修改,但我在添加以下代码时遇到了语法错误:

WHERE  datename(m,FOC_DATE) + ' ' + cast(datepart(yyyy,FOC_DATE) as varchar) = 'FEBRUARY 2015'
查询现在如下所示:

DECLARE @sql  NVARCHAR(max),
        @cols VARCHAR(max)

SET @cols = (SELECT DISTINCT a.FOC_TRANSACTIONCODE + ','
         FROM   P5FOLIOCHARGE a
                LEFT JOIN P5FOLIOHEADER b
                       ON a.FOC_ACCOUNT = b.FOH_ACCOUNT
         WHERE  datename(m,FOC_DATE) + ' ' + cast(datepart(yyyy,FOC_DATE) as varchar) = 'FEBRUARY 2015'
         AND FOC_PROPERTY = 'ZIL'
         AND FOC_NETAMOUNT NOT LIKE '-%'
         FOR xml path(''))

SELECT @cols = LEFT(@cols, Len(@cols) - 1)

SET @sql = 'SELECT *
    FROM   (SELECT b.FOH_PMSCONFIRMATIONNUMBER,
                   a.FOC_ACCOUNT,
                   a.FOC_date,
                   a.FOC_PROPERTY,
                   a.FOC_TRANSACTIONCODE,
                   CASE WHEN a.FOC_NETAMOUNT > 0 THEN a.FOC_NETAMOUNT ELSE 0 END AS FOC_NETAMOUNT
            FROM P5FOLIOCHARGE a
                 LEFT JOIN P5FOLIOHEADER b ON a.FOC_ACCOUNT = b.FOH_ACCOUNT
            WHERE  datename(m,FOC_DATE) + ' ' + cast(datepart(yyyy,FOC_DATE) as varchar) = ''FEBRUARY 2015''
            AND FOC_PROPERTY = 'ZIL'  
            AND FOC_NETAMOUNT NOT LIKE ''-%'')a
           PIVOT (Sum(FOC_NETAMOUNT)
                 FOR FOC_TRANSACTIONCODE IN (' + @cols + ')) pv '

EXEC Sp_executesql @sql
我在上面提到的代码中有一个语法错误,它第二次出现在查询中,也就是在SET@sql=..之后


我试过几种组合使用‘符号’,但还是失败了。我想这一定是一个简单的编码语法错误,但它只是不适合我

我不确定,但请检查一下

其中datenamem,FOC_DATE+“”+castdatepartyyyy,FOC_DATE为varchar=2015年2月,应为datenamem,FOC_DATE++castdatepartyyyy,FOC_DATE为varchar=2015年2月

FOC_属性='ZIL'应该是,FOC_属性=ZIL


谢谢工作起来很有魅力!