Как я уже говорил выше, друг помог мне найти решение.
Поскольку запись PROJETO
должна существовать всегда, у меня всегда будет одна строка, в которой я должен вернуть TOTAL1 и TOTAL2, дажекогда есть 0 тестов с правильной прослеживаемостью (что означает TOTAL2 = 0)
Итак, мне нужен был один запрос и один подзапрос.
Первый запрос будет искать папку PROJETO
затем LEFT JOIN
в подзапрос, который имеет всю основную логику, затем CROSS с TOTAL1
и TOTAL2
.
Итак, если папка проекта существует, есть тесты, но 0 из них имеют правильныеПри прослеживаемости внешний запрос вернул бы то, что я просил (и даже лучше):
|SIGA| |PROJETO | |ORIGEM|........ |TOTAL1| |TOTAL2|
|1234| |1234 - Project X| |NULL |........ |10| |0|
Я не уверен, что могу так звонить, но я представляю это как «запрос обтекания»: все записивозвращенный в подзапросе оберните нужными столбцами.
В любом случае, вот код:
SELECT
'@SIGA@' AS SIGA,
CYCL_FOLD.CF_ITEM_NAME AS Projeto,
Origem,
Processo,
Funcionalidade,
Cenario,
Test_ID,
Instancia_Do_Teste,
ID_Cliente,
Nome_do_Caso,
Dependencia,
Tipo_Teste,
Tipo_Cenario,
Descricao,
Pre_Condicao,
Resultado_Esperado,
Dados_Necessarios,
Resp_Execucao,
Status_Execução_Caso,
Sistemas_Impactados_Teste,
Regressao,
Autor_Do_Caso,
Ordem_Dos_Passos,
Nome_do_Passo,
Descricao_do_Passo,
Resultado_Esperado_Passo,
Sistemas_Impactado_Passo,
Provedor,
ST_RUN_ID,
Status_Execução_Passo,
TOTAL1.Total_Testes_TestFolder,
TOTAL2.Total_Testes_Com_Rastr
FROM
CYCL_FOLD
LEFT JOIN
(
SELECT
CYCL_FOLD.CF_ITEM_NAME,
'@SIGA@' AS SIGA,
CYCL_FOLD.CF_ITEM_NAME AS Projeto,
CYCLE.CY_CYCLE AS Origem,
REQ_NAMES.PROCESSO AS Processo,
REQ_NAMES.FUNCIONALIDADE AS Funcionalidade,
ALL_LISTS.AL_DESCRIPTION AS Cenario,
TEST.TS_TEST_ID AS Test_ID,
TC_TEST_INSTANCE AS Instancia_Do_Teste,
TESTCYCL.TC_USER_01 AS ID_Cliente,
TEST.TS_NAME AS Nome_do_Caso,
TESTCYCL.TC_USER_02 AS Dependencia,
TEST.TS_USER_06 AS Tipo_Teste,
TEST.TS_USER_02 AS Tipo_Cenario,
/* Descricao */
REGEXP_REPLACE(CAST(TEST.TS_DESCRIPTION AS VARCHAR2(4000)), '<[^<]+>', NULL) AS
Descricao,
/* Pre_Condicao */
REGEXP_REPLACE(CAST(TEST.TS_USER_25 AS VARCHAR2(4000)), '<[^<]+>', NULL) AS
Pre_Condicao,
/* Resultado_Esperado */
REGEXP_REPLACE(CAST(TEST.TS_USER_26 AS VARCHAR2(4000)), '<[^<]+>', NULL) AS
Resultado_Esperado,
/* Dados_Necessarios */
REGEXP_REPLACE(CAST(TEST.TS_USER_27 AS VARCHAR2(4000)), '<[^<]+>', NULL) AS
Dados_Necessarios,
TESTCYCL.TC_USER_04 AS Resp_Execucao,
TESTCYCL.TC_STATUS AS Status_Execução_Caso,
TEST.TS_USER_03 AS Sistemas_Impactados_Teste,
TEST.TS_USER_05 AS Regressao,
TEST.TS_RESPONSIBLE AS Autor_Do_Caso,
/* Comentario */
REGEXP_REPLACE(CAST(TEST.TS_DEV_COMMENTS AS VARCHAR2(4000)) , '<[^<]+>', NULL)AS
Comentario,
DESSTEPS.DS_STEP_ORDER AS Ordem_Dos_Passos,
DESSTEPS.DS_STEP_NAME AS Nome_do_Passo,
/* Descrição do Passo */
REGEXP_REPLACE(CAST(DESSTEPS.DS_DESCRIPTION AS VARCHAR2(4000)), '<[^<]+>', NULL) AS
Descricao_do_Passo,
/* Resultado Esperado do Passo */
REGEXP_REPLACE(CAST(DESSTEPS.DS_EXPECTED AS VARCHAR2(4000)), '<[^<]+>', NULL) AS
Resultado_Esperado_Passo,
DESSTEPS.DS_USER_01 AS Sistemas_Impactado_Passo,
DESSTEPS.DS_USER_02 AS Provedor,
STEP.ST_RUN_ID,
STEP.ST_STATUS AS Status_Execução_Passo
FROM
CYCL_FOLD
LEFT JOIN RELEASE_CYCLES
ON
RELEASE_CYCLES.RCYC_ID = CYCL_FOLD.CF_ASSIGN_RCYC
LEFT JOIN CYCLE
ON
CYCLE.CY_FOLDER_ID = CYCL_FOLD.CF_ITEM_ID
LEFT JOIN TESTCYCL
ON
TESTCYCL.TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
LEFT JOIN TEST
ON
TEST.TS_TEST_ID = TESTCYCL.TC_TEST_ID
LEFT JOIN DESSTEPS
ON
DESSTEPS.DS_TEST_ID = TEST.TS_TEST_ID
LEFT JOIN RUN
ON
RN_TEST_ID = TEST.TS_TEST_ID
AND RN_TESTCYCL_ID = TESTCYCL.TC_TESTCYCL_ID
AND RN_CYCLE_ID = CYCLE.CY_CYCLE_ID
LEFT JOIN STEP
ON
ST_TEST_ID = DS_TEST_ID
AND ST_DESSTEP_ID = DESSTEPS.DS_ID
AND ST_RUN_ID = RN_RUN_ID
LEFT JOIN ALL_LISTS
ON
ALL_LISTS.AL_ITEM_ID = TEST.TS_SUBJECT
INNER JOIN
(
SELECT
TESTCYCL.TC_TEST_ID AS TEST_ID,
wm_concat(REQ2.RQ_REQ_NAME) AS Processo,
wm_concat(REQ1.RQ_REQ_NAME) AS Funcionalidade
FROM
CYCL_FOLD
LEFT JOIN CYCLE
ON
CY_FOLDER_ID = CYCL_FOLD.CF_ITEM_ID
RIGHT JOIN TESTCYCL
ON
TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
RIGHT JOIN REQ_COVER
ON
RC_ENTITY_ID = TESTCYCL.TC_TEST_ID
INNER JOIN REQ REQ1
ON
RC_REQ_ID = REQ1.RQ_REQ_ID
INNER JOIN REQ REQ2
ON
REQ1.RQ_FATHER_ID = REQ2.RQ_REQ_ID
INNER JOIN REQ_TYPE
ON
REQ2.RQ_TYPE_ID = REQ_TYPE.TPR_TYPE_ID
AND REQ_TYPE.TPR_NAME = 'Processo'
RIGHT JOIN REQ_CYCLES
ON
RQC_REQ_ID = REQ1.RQ_REQ_ID
INNER JOIN RELEASE_CYCLES
ON
RQC_CYCLE_ID = RELEASE_CYCLES.RCYC_ID
AND CF_ASSIGN_RCYC = RELEASE_CYCLES.RCYC_ID
WHERE
CF_ITEM_NAME LIKE CONCAT('@SIGA@','%')
GROUP BY
TESTCYCL.TC_TEST_ID
UNION
SELECT
TESTCYCL.TC_TEST_ID AS TEST_ID,
'' AS Processo,
wm_concat(REQ1.RQ_REQ_NAME) AS Funcionalidade
FROM
CYCL_FOLD
LEFT JOIN CYCLE
ON
CY_FOLDER_ID = CYCL_FOLD.CF_ITEM_ID
RIGHT JOIN TESTCYCL
ON
TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
RIGHT JOIN REQ_COVER
ON
RC_ENTITY_ID = TESTCYCL.TC_TEST_ID
INNER JOIN REQ REQ1
ON
RC_REQ_ID = REQ1.RQ_REQ_ID
INNER JOIN REQ REQ2
ON
REQ1.RQ_FATHER_ID = REQ2.RQ_REQ_ID
INNER JOIN REQ_TYPE
ON
REQ2.RQ_TYPE_ID = REQ_TYPE.TPR_TYPE_ID
AND REQ_TYPE.TPR_NAME <> 'Processo'
RIGHT JOIN REQ_CYCLES
ON
RQC_REQ_ID = REQ1.RQ_REQ_ID
INNER JOIN RELEASE_CYCLES
ON
RQC_CYCLE_ID = RELEASE_CYCLES.RCYC_ID
AND CF_ASSIGN_RCYC = RELEASE_CYCLES.RCYC_ID
WHERE
CF_ITEM_NAME LIKE CONCAT('@SIGA@','%')
GROUP BY
TESTCYCL.TC_TEST_ID
)
REQ_NAMES
ON
REQ_NAMES.TEST_ID = TEST.TS_TEST_ID
WHERE
CYCL_FOLD.CF_ITEM_NAME LIKE CONCAT('@SIGA@','%')
AND
(
RN_RUN_ID IS NULL
OR RN_RUN_ID =
(
SELECT
MAX(RN_RUN_ID)
FROM
RUN
WHERE
RN_TEST_ID = TEST.TS_TEST_ID
AND RN_TEST_INSTANCE = TC_TEST_INSTANCE
)
)
)
mainQuery
ON
CYCL_FOLD.CF_ITEM_NAME = mainQuery.CF_ITEM_NAME
CROSS JOIN
(
SELECT
COUNT(TESTCYCL.TC_TEST_ID) AS Total_Testes_TestFolder
FROM
CYCLE,
CYCL_FOLD,
TESTCYCL
WHERE
TESTCYCL.TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
AND CYCLE.CY_FOLDER_ID = CYCL_FOLD.CF_ITEM_ID
AND CYCL_FOLD.CF_ITEM_NAME LIKE CONCAT('@SIGA@','%')
)
TOTAL1
CROSS JOIN
(
SELECT
COUNT(DISTINCT CONCAT(TESTCYCL.TC_TESTCYCL_ID, TESTCYCL.TC_TEST_ID)) AS
Total_Testes_Com_Rastr
FROM
CYCL_FOLD,
CYCLE,
TESTCYCL,
REQ_COVER,
REQ_CYCLES,
RELEASE_CYCLES
WHERE
TESTCYCL.TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
AND cycle.CY_FOLDER_ID = CYCL_FOLD.CF_ITEM_ID
AND CYCL_FOLD.CF_ITEM_NAME LIKE CONCAT('@SIGA@','%')
AND REQ_COVER.RC_ENTITY_ID = TESTCYCL.TC_TEST_ID
AND REQ_COVER.RC_REQ_ID = REQ_CYCLES.RQC_REQ_ID
AND REQ_CYCLES.RQC_CYCLE_ID = RELEASE_CYCLES.RCYC_ID
AND RELEASE_CYCLES.RCYC_NAME LIKE CONCAT('@SIGA@','%')
ORDER BY
TESTCYCL.TC_TEST_ID
)
TOTAL2
WHERE
CYCL_FOLD.CF_ITEM_NAME LIKE CONCAT('@SIGA@','%')
ORDER BY
Origem,
Funcionalidade,
Cenario,
Test_ID,
Instancia_Do_Teste,
Ordem_Dos_Passos