не могу добавить COUNT к запросу SQL
create table T1(id int, F1 varchar(100));
insert into T1 values(1, '10,56,657,34,767,71');
insert into T1 values(3, '1,5487,27,9');
insert into T1 values(2, '12,6,65,8,67,22,70,5');
Получившаяся таблица
id F1
1 '10,56,657,34,767,71'
3 '1,5487,27,9'
2 '12,6,65,8,67,22,70,5'
Задача реализовать запрос для таблицы выше в такой вид
id num val
1 1 10
1 2 56
...
- id – идентификатор
- num - порядковый номер значения в исходной строке
- val - значение
Тоесть нужно засплитить значения в первой таблице и сделать запрос при условии что:
- Нужно использовать рекурсивный SQL и конструкцию with.
- Не использовать функции regexp_split_to_table, unnest или подобные.
Мой конечный запрос считает количество всех расспличенных элементов но посчитать нужно количество элементов соответствующих каждому айди.
WITH A AS
(
SELECT id ,
(SELECT COUNT(*) FROM T1 CROSS APPLY STRING_SPLIT(f1, ',')) as 'num',
value AS 'val'
FROM T1 CROSS APPLY STRING_SPLIT(f1, ',')
)
SELECT * FROM A ORDER BY id;
Что получается при выполнении приложу в скрине. Если кто соображает подскажите пж как мне Count правильно сделать в этой ситуации.

Ответы (1 шт):
Автор решения: Никита Секушин
→ Ссылка
Ладно, для меня это было неочевидно, но я сделал. Если у кого-то будет задача с похожими условиями - пользуйтесь.
WITH A As
(
SELECT id, ROW_NUMBER() OVER (ORDER by id) num, value As 'val'
FROM T1 CROSS APPLY STRING_SPLIT(f1, ',') WHERE id = 1
UNION All
SELECT id, ROW_NUMBER() OVER (ORDER by id) id, value
FROM T1 CROSS APPLY STRING_SPLIT(f1, ',') WHERE id = 2
UNION All
SELECT id, ROW_NUMBER() OVER (ORDER by id) id, value
FROM T1 CROSS APPLY STRING_SPLIT(f1, ',') WHERE id = 3
)
SELECT * FROM A ;