下面的查询运行良好,并返回预期的结果
DECLARE @columns NVARCHAR(MAX),
@sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns+=N', p.'+QUOTENAME([Name])
FROM
(SELECT [Description] AS [Name]
FROM CNF_PaymentMethod AS p
WHERE Enabled = 1
AND PaymentMethodId <> 17
GROUP BY [Description]) AS x;
SET @sql = N'
SELECT [TransactionId], '+STUFF(@columns, 1, 2, '')+' FROM (
SELECT [TransactionId], [PaymentAmount] AS [Value], [Description] as [Name]
FROM [CNF_PaymentMethod]
join [DATA_Payment]
on [CNF_PaymentMethod].[PaymentMethodId] = [DATA_Payment].[PaymentMethodId]
) AS j PIVOT (SUM(Value) FOR [Name] in
('+(STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, ''))+')) AS p;';
EXEC sp_executesql @sql我想取消嵌入SET @sql语句,这样我就可以在没有嵌入的情况下运行它,但是我似乎不能得到正确的格式。
('+(STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, ''))+')) AS p;';我以预期的'.‘、ID或QUOTED_ID错误结束
发布于 2021-10-06 13:43:31
这就是所谓的动态SQL语句。SET @sql...的目的是基于一组变量动态生成SQL语句。在这种情况下,变量位是SET之上的SELECT的结果。如果将EXEC sp_executesql @sql更改为PRINT @sql,您将看到生成的语句。
请注意,每次基于CNF_PaymentMethod中的值运行此脚本时,SQL语句可能会有所不同。您可以从生成的PRINT将输出的SQL语句创建一个视图,但这只是一个一次性快照。在此基础上创建一个视图真的没有多大价值。
https://stackoverflow.com/questions/69466865
复制相似问题