2014-01-02 7 views
0

У меня есть следующая процедура для динамического поворота таблицы, но я получаю сообщение об ошибке.Pivot in SQL Server 2012

DECLARE @List varchar(5000) 
DECLARE @CNT int 
DECLARE @metric varchar(500) 

SET @LIST = '' 
DECLARE crs_TERRMETRICLIST CURSOR FOR SELECT 
METRIC_NAME FROM TEMP.ALLTERRDISTINCTMETRICNAMES 



OPEN crs_TERRMETRICLIST 
FETCH NEXT FROM crs_TERRMETRICLIST INTO @metric 
WHILE @@FETCH_STATUS =0 
BEGIN 
--SELECT @LIST = @[email protected]+',' 
SELECT @LIST = @LIST+''''[email protected]+''''+',' 
--SET @LIST = COALESCE(@LIST,'''','') 
FETCH NEXT FROM crs_TERRMETRICLIST INTO @metric 
END 
SET @LIST = LEFT(@LIST,LEN(@LIST)-1) 
CLOSE crs_TERRMETRICLIST 
DEALLOCATE crs_TERRMETRICLIST 

PRINT @LIST 
---SET @list = SELECT DISTINCT METRIC_NAME FROM TEMP.ALLTERRMETRICS 

SELECT TERRITORY_ID, METRIC_NAME, METRIC_VALUE 
FROM TEMP.ALLTERRMETRIC 
PIVOT 
(MAX(METRIC_VALUE) 
FOR METRIC_NAME IN (@LIST) 
) as pvt 
ORDER BY pvt.TERRITORY_ID 

Что я делаю неправильно?

+0

Какая ошибка? – Richard

ответ

0

Вы не можете объявить ось с помощью переменной, как вы. Вы можете объявить последний бит как динамический SQL:

declare @sql varchar(max) 

set @sql = 'SELECT TERRITORY_ID, METRIC_NAME, METRIC_VALUE 
FROM TEMP.ALLTERRMETRIC 
PIVOT 
(MAX(METRIC_VALUE) 
FOR METRIC_NAME IN (' + @LIST ') 
) as pvt 
ORDER BY pvt.TERRITORY_ID' 

exec (@sql) 
+1

Это работает. Благодарю. – user2993829