2017-06-16 65 views
0

我想我的組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一個不正確的語法?

感謝

+0

您的寵物表的結構是什麼?目前還不清楚你想用你的數據透視查詢來達到什麼目的。 –

回答

1

您需要使用動態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(''));