2015-02-06 2 views
1

Я сохранил значения в таблице Fields, Name. Вот список имен, которые должны отображаться как имена столбцов, для него я использую PIVOT. Мне нужно добавить 1 ко всем выбранным именам.Переименовать все сводные значения в SQL

Это должно быть что-то вроде этого:

До поворота:

Column name: | Name  |   
       | Jeniffer |          
       | Jason | 
       | Jack  | 

После поворота:

Column names: | Jennifer1 | Jason1 | Jack1 | 
       -- It should go as column names 
       -- And on each of name add 1  

У меня есть код для PIVOT, Он успешно делать это, только проблема в том, как добавить блок 1 ко всем выбранным значениям?

Это часть моего кода из хранимой процедуры:

SELECT @cols += ([Name]) + ',' 
FROM ( SELECT Name -- Here selecting names which should be renamed 
    FROM Fields 
    WHERE Id Between 50 And 82 
) a 

SET @cols = LEFT(@cols, LEN(@cols) - 1) 
SET @sql = 'SELECT * FROM 
    (
     SELECT FF.Name AS [NamePiv]      
     FROM ...................... 
     WHERE ......................         
    ) x 
    PIVOT 
    (
     MIN (Val1) 
     FOR NamePiv IN (' + @cols + ') 
    ) p' 

EXEC Sp_executesql @sql, N'@param1 NVARCHAR(60), @param2 TINYINT, @param3 NVARCHAR(80)', @param1, @param2, @param3    

ответ

0

Вы можете создать переменную @selectCols и хранить псевдонимы в нем:

DECLARE @selectCols varchar(max) = '' 
SELECT @cols += ([Name]) + ',', @selectCols += ([Name]) + ' [' + ([Name]) + '1] ,' 
FROM ... 

SET @selectCols = LEFT(@selectCols, LEN(@selectCols) - 1) 
SET @sql = 'SELECT ' + @selectCols + ' FROM 
      (... 
+0

Спасибо за ответ. Действительно ли мне нужно использовать 'SET @sql = 'SELECT' + @selectCols + 'FROM'? Вместо 'SELECT * FROM ...' Теперь ничего не возвращается. Нет ошибок, но ничего не возвращается –

+0

Урезали ли вы запятую запятую @selectCols? – flo

+0

То же самое после того, как я использую этот 'SET @selectCols = LEFT (@selectCols, LEN (@cols) - 1)' ничего не возвращает –

Смежные вопросы