Sql 透视表“语法不正确”

Sql 透视表“语法不正确”,sql,sql-server,pivot,Sql,Sql Server,Pivot,我试图将我的sql表分组在一起,但收到的语法不正确 Declare @pet varchar(max) SET @pet = (select petsName from pets); select * from pets AS basedata Pivot ( count(PetID) for petsName in (' + @pet+ ') <-- error here ) as pivottable 为什么我在@pet附近收到不正确的语法 谢谢您需要为此使用动态sq

我试图将我的sql表分组在一起,但收到的语法不正确

Declare @pet varchar(max)

SET @pet = (select petsName from pets);

select * from pets

AS basedata

Pivot (
 count(PetID)

 for petsName in (' + @pet+ ') <-- error here
)

as pivottable
为什么我在@pet附近收到不正确的语法


谢谢

您需要为此使用动态sql

DECLARE @pet VARCHAR(max)

SET @pet = (SELECT ',' + Quotename(petsName) -- Quotename is used to escape illegal characters
            FROM   pets
            FOR xml path('')); -- to concatenate the records 

SET @pet = Stuff(@pet, 1, 1, '') -- to remove the leading comma 

DECLARE @sql NVARCHAR(8000) = ''

SET @sql = '
select * from pets AS basedata
Pivot ( count(PetID)
for petsName in (' + @pet + ') ) as pivottable' 

exec sp_executesql @sql -- to execute the dynamically framed string 
查询中的另一个错误是,您试图将petsName分配给@pet变量

SET @pet = (select petsName from pets);
但是一个变量只能存储一条记录。因此,您需要将这些记录连接到一个由逗号分隔的记录中。然后该变量可以在透视列表中使用

SET @pet = (SELECT ',' + Quotename(petsName)
            FROM   pets
            FOR xml path('')); 

宠物桌的结构是什么?目前还不清楚您试图通过pivot查询实现什么。