Я также поддержал комментарий об изменении дизайна таблицы, но есть ситуации, когда кто-то не может этого сделать. Итак, вот решение для этого случая, и это не так сложно. Мы обычно называем XML для помощи, когда нужно обрабатывать форматированные строки в столбцах XML.
-- Prepare data for solution testing
DECLARE @srctable TABLE (
id INT,
name VARCHAR(999),
namexml XML
)
INSERT INTO @srctable
SELECT id, name, namexml FROM (VALUES
(1, 'A1=7|A5=1|A10=5|A20=12|A50=8', null),
(2, 'A1=10|A5=2|A10=10|A20=14|A50=4', null),
(3, 'A1=3|A5=3|A10=5|A20=12|A50=8', null)
) v (id, name, namexml)
-- Transform source formatted string to XML string
UPDATE @srctable
SET namexml = CAST('<row><data ' + REPLACE(REPLACE(name, '|', '"/><data '), '=', '="') + '"/></row>' AS XML)
-- Final select from XML data
SELECT SUM(x.data.value('(@A1)[1]', 'INT')) AS SUMA1,
SUM(x.data.value('(@A5)[1]', 'INT')) AS SUMA5,
SUM(x.data.value('(@A10)[1]', 'INT')) AS SUMA10,
SUM(x.data.value('(@A20)[1]', 'INT')) AS SUMA20,
SUM(x.data.value('(@A50)[1]', 'INT')) AS SUMA50
FROM @srctable AS t
CROSS APPLY t.namexml.nodes('/row/data') x (data)
Вам необходимо отформатировать полученную строку любым способом.
Это будет очень трудно. Вам лучше изменить таблицу desgin. Никогда не храните несколько значений в одном столбце! –
Хорошо спасибо, я изменю дизайн – GeoVIP