У меня есть таблица с этими столбцами:
surname name birthdate id_doc role 01 02 ... 50
Vardy Jack 19870215 1234 'emp' 20200110 20200527 20200610
Где поля от 01 до 50 - даты. Мне нужна такая таблица:
surname name birthdate id_doc role title_code data
Vardy Jack 19870215 1234 'emp' 01 20200110
Vardy Jack 19870215 1234 'emp' 02 20200527
....
Где код заголовка должен быть именем столбца от 01 до 50, данные должны быть значением этого столбца в mytable
Я сделал это хранимая процедура, просмотрев старые вопросы:
CREATE PROCEDURE proc
AS
BEGIN
DECLARE @UnpivotList NVARCHAR(MAX) = N'';
SELECT @UnpivotList = CONCAT(@UnpivotList, ',(''', c.name, ''', fe.', c.name, ')')
FROM
sys.columns c
WHERE
c.object_id = OBJECT_ID('mytable')
AND c.column_id > 5;
DECLARE @sql NVARCHAR(MAX) = CONCAT(N'
SELECT
fe.surname,
fe.name,
fe.birthdate,
fe.id_doc,
fe.role,
ul.title_code,
ul.Data
FROM
mytable fe
CROSS APPLY ( VALUES ', STUFF(@UnpivotList, 1, 1, ''), N') ul (title_code, Data)');
EXEC sys.sp_executesql @sql;
END
, но я получаю синтаксическую ошибку около '.01'
. Может кто-нибудь мне помочь?