При использовании сводной таблицы необходимо убедиться, что все столбцы «Option» имеют одинаковый тип и длину данных.
Я бы предложил следующий ответ:
IF NOT EXISTS( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME
= 'TABLE1' )
create table table1
(
name nvarchar(50),
colvalue nvarchar(50)
)
else
truncate table table1
declare @table nvarchar(50)
set @table = 'yourtable'
declare @column table
(
ID integer identity,
colname nvarchar(20)
)
insert into @column
SELECT c.name FROM sys.tables t
JOIN sys.columns c ON t.Object_ID = c.Object_ID
WHERE t.Name = @table
and c.name in ('Option1','Option2','Option3','Option4','Option5')
declare @minID integer, @maxID integer
declare @cmd nvarchar(max)
declare @col nvarchar(20)
declare @SQLStr nvarchar(max)
select @minID = MIN(ID), @maxID= MAX(ID)
from @column
while @minID <= @maxID
begin
select @col = colname
from @column
where ID = @minID
set @SQLStr =
'insert into table1 (name, colvalue)
select name,' + @col + '
from ' + @table + '
where ' + @col + ' <> 0'
exec(@SQLStr)
set @minID = @minID + 1
end
select distinct name, STUFF(
(SELECT ',' + a.colvalue AS [text()]
from Table1 a
where a.name = b.name
Order by a.colvalue
for xml PATH('')),1,1,'' ) AS Comments_Concatenated
from Table1 b
group by name, colvalue
ORDER BY name
Вам просто нужно изменить @table, указав имя таблицы и список нужных вам столбцов, прежде чем вставлять в @column.
Неважно, какой у вас тип данных, он будет работать нормально.