Я схожу с ума от этого странного поведения.
Я использую 2 запроса SYS_CONNECT_BY_PATH, но один из них всегда получает нулевое значение, в то время как я проверял наличие значений.
Цель состоит в том, чтобы объединить несколько строк в одну, разделенных запятыми.
Это рабочий:
SELECT id_audit_req, SUBSTR(MAX(SYS_CONNECT_BY_PATH (profs_names, ', ')), 3) all_descriptions
FROM (SELECT ROW_NUMBER () OVER (PARTITION BY id_audit_req ORDER BY id_audit_req, profs_names) rnum, id_audit_req, profs_names
FROM (SELECT id_audit_req, nvl(p.nick_name, p.name) profs_names
FROM audit_req_prof arp, professional p
WHERE arp.flg_rel_type = 'A'
AND arp.id_professional = p.id_professional
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR id_audit_req = id_audit_req
GROUP BY id_audit_req
В этом запросе внутренние (до SYS_CONNECT_BY_PATH) результаты SQl равны
rnum id_audit_req profs_names
1 1 Auditor
1 501 Auditor
1 502 Auditor
2 502 Auditor2
1 503 Auditor
1 504 Auditor
1 505 Auditor
2 505 Auditor2
И окончательный результат верен:
id_audit_req all_descriptions
1 Auditor
504 Auditor
502 Auditor, Auditor2
505 Auditor, Auditor2
503 Auditor
501 Auditor
Теперь у меня есть другой запрос, и внутренний результат также верен, но окончательный результат равен нулю, и я не знаю почему:
SELECT id_epis_triage, SUBSTR (MAX(SYS_CONNECT_BY_PATH (bp, ', ')), 3) all_descriptions
FROM (SELECT ROW_NUMBER () OVER (PARTITION BY id_epis_triage ORDER BY id_epis_triage, bp desc) rnum, id_epis_triage, bp
FROM (SELECT id_epis_triage, vsr.VALUE as bp
FROM vital_sign_read vsr, vital_sign vs
WHERE vsr.id_epis_triage in (SELECT arpe.id_epis_triage FROM audit_req_prof_epis arpe
WHERE arpe.id_audit_req_prof = 2)
AND vsr.flg_state = 'A'
AND vsr.id_vital_sign IN (SELECT id_vital_sign_detail FROM vital_sign_relation WHERE relation_domain = 'C')
AND vsr.dt_vital_sign_read in
(SELECT vsr2.dt_vital_sign_read
FROM vital_sign_read vsr2
WHERE (vsr2.id_epis_triage, vsr2.dt_vital_sign_read) IN
(SELECT id_epis_triage, MAX(vsr4.dt_vital_sign_read)
FROM alert.vital_sign_read vsr4
WHERE vsr4.id_epis_triage in (SELECT arpe.id_epis_triage FROM audit_req_prof_epis arpe
WHERE arpe.id_audit_req_prof = 2)
AND vsr4.id_vital_sign = vsr.id_vital_sign
AND vsr4.flg_state = 'A'
group by id_epis_triage)
AND vsr2.id_vital_sign = vsr.id_vital_sign
AND vsr2.id_vital_sign IN (SELECT id_vital_sign_detail
FROM vital_sign_relation
WHERE relation_domain = 'C'
AND vsr2.id_epis_triage in (SELECT arpe.id_epis_triage FROM audit_req_prof_epis arpe
WHERE arpe.id_audit_req_prof = 2)
AND id_vital_sign_parent = 28)
AND vsr2.flg_state = 'A')
AND vs.id_vital_sign = vsr.id_vital_sign
ORDER BY vs.intern_name_vital_sign
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 and PRIOR id_epis_triage = id_epis_triage
group by id_epis_triage
Внутренний результат:
rnum id_epis_triage bp
1 2134 120
2 2134 85
1 2137 112
2 2137 98
Окончательный результат:
Нулевой
У кого-нибудь есть идеи? Я перепробовал много вариантов, почти всегда один и тот же результат.
Только если я уберу предложение START WITH, я получу следующее:
id_epis_triage all_descriptions
2134 85
2137 98
Похоже, он получает только последнее значение для каждого числа.
Но, по сути, оба SQL одинаковы, структура точно такая же.