В TD14 было бы встроенный в таблице UDF имени STRTOK_SPLIT_TO_TABLE, прежде чем вам нужно реализовать свой собственный UDF или использовать рекурсивный запрос.
Я изменил существующую строку расщепляющий сценарий использовать пробелы в качестве разделителя:
CREATE VOLATILE TABLE Strings
(
groupcol INT NOT NULL,
string VARCHAR(991) NOT NULL
) ON COMMIT PRESERVE ROWS;
INSERT INTO Strings VALUES (1,'71.792');
INSERT INTO Strings VALUES (2,'71.792 1 2');
INSERT INTO Strings VALUES (3,'1.283 2 3');
WITH RECURSIVE cte
(groupcol,
--string,
len,
remaining,
word,
pos
) AS (
SELECT
GroupCol,
--String,
POSITION(' ' IN String || ' ') - 1 AS len,
TRIM(LEADING FROM SUBSTRING(String || ' ' FROM len + 2)) AS remaining,
TRIM(SUBSTRING(String FROM 1 FOR len)) AS word,
1
FROM strings
UNION ALL
SELECT
GroupCol,
--String,
POSITION(' ' IN remaining)- 1 AS len_new,
TRIM(LEADING FROM SUBSTRING(remaining FROM len_new + 2)),
TRIM(SUBSTRING(remaining FROM 1 FOR len_new)),
pos + 1
FROM cte
WHERE remaining <> ''
)
SELECT
groupcol,
-- remove the NULLIF to get 0 for blank strings
SUM(CAST(NULLIF(word, '') AS DECIMAL(18,3)))
FROM cte
GROUP BY 1
Это может использовать много золотника, надеюсь, вы не работаете, что на большом столе.
Какой у вас релиз Teradata? Каково максимальное количество значений? Конечно, это абсолютно плохая модель данных, нарушающая 1-ю нормальную форму. Вместо этого следует исправить это. – dnoeth
Выпуск 13.10 ... на самом деле данные, которые я получаю в col2, являются некоторыми вычислениями .. Мне просто нужно подвести итог этим nos. – Debaditya
«некоторый расчет» вы можете показать, какой расчет? Почему вы не делаете сумму во время этого расчета? – dnoeth