Подсчитать и перечислить строки? PL / SQL - PullRequest
2 голосов
/ 20 марта 2020

Я пытаюсь подсчитать все строки, которые соответствуют критериям, а затем также перечислить порядковые номера для каждой строки, чтобы мы могли быстро идентифицировать те, которые соответствуют критериям. Пример: мы знаем, что 5 соответствуют критериям полного ответа, и мы хотим знать, что есть 5, но также и что это за порядковые номера. Как мне написать это в моем запросе?

select 
  count(sf.protocol_subject_id) as responseCount, sf.BEST_RESPONSE
from oncore.sv_sub_followup sf
where sf.protocol_no = $P{pPclNo} and sf.best_response is not null
group by sf.best_response
order by decode(best_response, 'Complete Response', 1, 'Partial Response', 2, 'Stable', 3, 'Progressive', 4, 'Not Evaluable', 5)

Я должен также упомянуть, что это один из 9 подотчетов, составляющих более крупный отчет. Не уверен, если это имеет значение при попытке сделать это. Я очень новичок в PL / sql. Заранее благодарю за любую помощь.

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Вы можете использовать подзапрос для получения ваших результатов, как показано ниже

        SELECT   responsecount,
             sf1.best_response,
             sf1.protocol_subject_id
             (
                      select   count(sf.protocol_subject_id) AS responsecount,
                               sf.best_response
                      FROM     oncore.sv_sub_followup sf
                      WHERE    sf.protocol_no = $p{ppclno}
                      AND      sf.best_response IS NOT NULL
                      GROUP BY sf.best_response)rec,
             oncore.sv_sub_followup             sf1
    WHERE    sf1.protocol_no=$p{ppclno}
    AND      sf1.best_response=rec.best_response
    ORDER BY instr('Complete Response,Partial Response,Stable,Progressive,Not Evaluable',sf1.best_response);
0 голосов
/ 21 марта 2020

Если я правильно понял, вам нужно подсчитать строки для каждого BEST_RESPONSE для данного PROTOCOL_NO, а также перечислить идентификаторы (protocol_subject_id) этих строк. Вы можете использовать функцию anality c LISTAGG , которая объединяет значения полей по группе. Как то так:

SELECT
    best_response,
    COUNT(protocol_subject_id) AS responsecount,
    LISTAGG(protocol_subject_id, ', ') WITHIN GROUP (
        ORDER BY
            1
    ) matching_rows_ids
FROM
    sv_sub_followup
WHERE
    protocol_no = :protocol_no
AND best_response IS NOT NULL
GROUP BY
    best_response
ORDER BY
    decode(best_response, 'Complete Response', 1, 'Partial Response', 2,
       'Stable', 3, 'Progressive', 4, 'Not Evaluable',
       5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...