重命名 SQL 中的所有透视值
Rename all Pivoted Values in SQL
我在 Fields
table、Name
列中存储了值。以下是应作为列名的名称列表,为此我使用 PIVOT
。我需要将 1
添加到所有选定的名称。
应该是这样的:
枢轴前:
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
您可以创建一个变量 @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
( ...
我在 Fields
table、Name
列中存储了值。以下是应作为列名的名称列表,为此我使用 PIVOT
。我需要将 1
添加到所有选定的名称。
应该是这样的:
枢轴前:
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
您可以创建一个变量 @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
( ...