Это помечено [sql-server]
.Это подход SQL-Server:
Вы можете попробовать это
Я создаю таблицу макетов
DECLARE @tbl TABLE(Test VARCHAR(100),Energy INT);
INSERT INTO @tbl VALUES
('C018-3L-1',113)
,('C018-3L-2',79)
,('C018-3L-3',89)
,('C021-3T-1',115)
,('C021-3T-2',100);
Это запрос
SELECT p.*
FROM
(
SELECT LEFT(t.Test,7) AS Test
,CONCAT('Energy-',RIGHT(t.Test,1)) AS ColumnName
,Energy
FROM @tbl t
) tbl
PIVOT
(
MAX(Energy) FOR ColumnName IN([Energy-1],[Energy-2],[Energy-3])
) p;
Результат
Test Energy-1 Energy-2 Energy-3
C018-3L 113 79 89
C021-3T 115 100 NULL
Некоторое объяснение:
Это зависит от формата исправления вашей строки и максимум 3 столбцов.Другой подход состоял в том, чтобы найти последний дефис и использовать его положение, чтобы разделить строку на начальную часть и число.При различном количестве чисел вы должны либо знать ожидаемый максимум, либо полностью пройти общий маршрут (например, динамический SQL).