【发布时间】:2015-09-02 17:05:15
【问题描述】:
我有如下动态 sql 查询。
DECLARE @cols AS NVARCHAR(MAX) = '[0],[3],[11]',
@query AS NVARCHAR(MAX)
SET @query = N'SELECT * FROM
(
SELECT
year(createdDate) as [year],month(createdDate) as [month],cp.product_Id as product_ID,cp.salesprice as Amount
FROM customer_products cp
)s
PIVOT
(
SUM(Amount)
FOR product_Id IN ( '+ @cols +' ))
AS pvt;'
EXECUTE(@query)
问题:
上面的查询有效,但下面的查询不工作,因为
SELECT @cols = CONCAT(@cols, '[', cast(product_ID as varchar),']') FROM Product
代码块。错误显示附近有语法错误
DECLARE @cols AS NVARCHAR(MAX) = '',
@query AS NVARCHAR(MAX)
SELECT @cols = CONCAT(@cols, '[', cast(product_ID as varchar),'],') FROM Product
SET @query = N'SELECT * FROM
(
SELECT
year(createdDate) as [year],month(createdDate) as [month],cp.product_Id as product_ID,cp.salesprice as Amount
FROM customer_products cp
)s
PIVOT
(
SUM(Amount)
FOR product_Id IN ( '+ @cols +' ))
AS pvt;'
EXECUTE(@query)
从 Product 中选择 productID 时,我错过了上述查询中缺少的确切内容?
【问题讨论】:
-
我猜你需要从@cols 中删除最后一个
, -
以上查询为 [0],[3],[11] 这就是我添加的原因,如果您说我必须删除,我该如何解决谢谢
-
在连接之后和定义@query之前使用
SET @cols = LEFT(@cols, LEN(@cols) - 1)。并查看my answer 示例演示 -
@lad2025 谢谢它的工作原理
-
作为旁注。在您调用
EXEC (@QUERY)之前,我几乎总是调用PRINT @QUERY,这样我就可以看到动态SQL 正在生成什么。它可以省去很多麻烦,并使您可以控制生成的代码。一种很好的简单调试方法。
标签: sql-server tsql pivot