Нихрена не понял, как обычно

СП, что помогаешь горю.

вывод напрашивается сам можно было реализовать это простым добавлением
возможности в WITH  и написанное было бы такого вида в начале например
(может и както по другому)
WITH RECURSIVE T001_TREE as DISTINCT T003_1b (

   Что мешает делать выборку из T003_1b с DISTINCT ?

И еще есть момент почему запрещено писать так

   Агрегаты в рекурсивных запросах запрещены стандартом и здравым смыслом.

   В твоём случае можно сделать примерно так :

Было
         --Предыдущие документы
select distinct D.T003_1, b_StrListAddGet(:HList, (select T003_1 from t001 where T001.T001_1 = D.T001_1b)) as T003_1b
           FROM T001 D join T001_TREE Db on D.T003_1 = Db.T003_1b
           where D.T003_3 >= :VT003_3

Стало

select D.T003_1, b_StrListAddGet(:HList, (select T003_1 from t001 where T001.T001_1 = D.T001_1b)) as T003_1b FROM (SELECT DISTINCT T003_1 FROM T001 where T003_3 >= :VT003_3) D
               join T001_TREE Db on D.T003_1 = Db.T003_1b


За мысль огромное СП. Но я когда начинал так пробовал. Решил еще раз и снова возникли вопросы сделал так
WITH RECURSIVE T001_TREE as (
select distinct T003_1, (select T003_1 from t001 where T001.T001_1 = T1.T001_1b) as T003_1b
           FROM T001 T1 where T1.T003_1 = 'aFcGzkMlus4YOBbB7w9WP2'
         union all
         --Предыдущие документы
         select D1.T003_1, D1.T003_1b
           FROM T001_TREE Db join (SELECT DISTINCT S1.T003_1,
(select F.T003_1 from t001 F where F.T001_1 = S1.T001_1b) as T003_1b
             FROM T001 S1 where T003_3 >= '15.12.2008') D1
           on D1.T003_1 = Db.T003_1b
         union all
         --Поддокументы "например акты производства"
         select  D2.T003_1, D2.T003_1b
           FROM T001_TREE Db join
             (SELECT DISTINCT S2.T003_1,
(select F.T003_1 from t001 F where F.T001_1 = S2.T001_1b) as T003_1b,
               T3.T003_1b as T3_T003_1b
             FROM T003 T3 join T001 S2 on S2.T003_1 = T3.T003_1
             where T3.IDDoc <> 53) D2 on  D2.T3_T003_1b = Db.T003_1
)
весь результат 1991 строка но если внизу
             (SELECT /*DISTINCT */S2.T003_1
то почемуто всего 341 строка

Вот сижу в догадках как и в первые разы. Баг иль не баг. По идее при DISTINCT должно быть меньше.

Ответить