Ошибка возврата при подсчете записей в запросе, сгруппированном в Oracle - PullRequest
0 голосов
/ 05 июня 2019

У меня проблема с попыткой сгруппировать некоторые записи, и при подсчете количества записей, возвращаемых запросом, добавляется пример:

07  COMERCIO                               92         
15  SERVICIOS OTROS                        41  
01  AGRICULTURA, GANADERIA Y SILVICULTURA  141  
04  INDUSTRIA MANUFACTURERA                28  
10  BANCA Y FINANZAS                       5    
12  ADMINISTRACION PUBLICA                 16  
03  MINERIA                                3  
16  HOGAR                                  2  
08  HOTELES Y RESTAURANTES                 37  
11  EMPRESARIAL                            21  
14  SOCIAL Y SALUD                         4  
06  CONSTRUCCIÓN                           3  
09  TRANSPORTE                             30  
13  EDUCACION                              10

Это запрос:

SELECT 
    AGRUP.VC_CODDET AS CHR_SECECO,
    AGRUP.VC_NOMDET AS VC_SECECO,
    0 AS INT_NROPRESTAMO,
    COUNT(*)  INTO_BENEFICIARIOS,
    0 AS DEC_SALCON      
    FROM TB_JSI_PRESTAMO_DETALLE PREDET
INNER JOIN TB_JSI_PRESTAMO PRE ON 
PRE.INT_IDPRESTAMO=PREDET.INT_IDPRESTAMO
INNER JOIN TB_JSI_BENEFICIARIO_IFI BENIFI ON 
BENIFI.INT_IDBENEIFI=PRE.INT_IDBENEIFI
INNER JOIN TB_JSI_OPERACION OPE ON PRE.INT_IDOPE = OPE.INT_IDOPE AND 
TRUNC(TO_DATE(OPE.DT_FECVEN))>TRUNC(TO_DATE('30/09/2018', 'DD/MM/YY'))   
INNER JOIN TB_JSI_CIIU CIIU ON PRE.INT_IDACT = CIIU.INT_IDACT AND 
PRE.INT_IDSEC=CIIU.INT_IDCLAS 
INNER JOIN TB_JSI_TABLA_DET SECECO ON SECECO.INT_IDDET=CIIU.INT_IDCLAS 
INNER JOIN TB_JSI_AGRUPA_SECTOR AGRSEC ON SECECO.INT_IDDET = 
AGRSEC.INT_IDSEC 
INNER JOIN TB_JSI_TABLA_DET AGRUP ON AGRSEC.INT_IDAGRU = AGRUP.INT_IDDET 
INNER JOIN TB_JSI_TABLA_DET MON ON OPE.INT_IDMON = MON.INT_IDDET
INNER JOIN TB_JSI_IFI IFI ON OPE.INT_IDIFI = IFI.INT_IDIFI 
WHERE TRUNC(PREDET.DTE_FECPRO) = (
            SELECT 
                    TRUNC(DTE_FECPRO)
            FROM (SELECT 
                    DTE_FECPRO
                  FROM TB_JSI_PRESTAMO_DETALLE
                  WHERE DTE_FECPRO<=TO_DATE('30/09/2018','DD/MM/YY')
                  AND DEC_SALDOL>0
                  ORDER BY DTE_FECPRO DESC)
                  WHERE ROWNUM = 1
            ) 
            AND (NULL IS NULL OR OPE.INT_IDTIPPRO =2) 
            AND (NULL IS NULL OR OPE.INT_IDMON = 364)
            AND (NULL IS NULL OR OPE.INT_IDIFI=72)
            GROUP BY AGRUP.VC_CODDET, AGRUP.VC_NOMDET

и должен вернуть этот результат

07  COMERCIO                               92  
15  SERVICIOS OTROS                        41  
01  AGRICULTURA, GANADERIA Y SILVICULTURA  141  
04  INDUSTRIA MANUFACTURERA                28  
10  BANCA Y FINANZAS                       4    
12  ADMINISTRACION PUBLICA                 16  
03  MINERIA                                3  
16  HOGAR                                  2  
08  HOTELES Y RESTAURANTES                 37  
11  EMPRESARIAL                            21  
14  SOCIAL Y SALUD                         4  
06  CONSTRUCCIÓN                           3  
09  TRANSPORTE                             30  
13  EDUCACION                              10  

так как у меня есть эти записи и при подсчете я должен вернуть 4, а не 5

269516  10  BANCA Y FINANZAS        1   
269558  10  BANCA Y FINANZAS        1   
269592  10  BANCA Y FINANZAS        2   
269611  10  BANCA Y FINANZAS        1

1 Ответ

0 голосов
/ 05 июня 2019

@ Роллер, я проанализировал результат, и теперь стало ясно, что в одной из таблиц, используемых в запросе, есть две записи с условием соответствия, и поэтому он возвращает 5, а не 4.

Вам просто нужно идентифицировать таблицу, и если вы не можете, то используйте следующий прием.

Прежде всего, определите таблицу, на основе которой вы говорите, что должно быть 4 строки, а затем используйте PK этой таблицы в подсчете следующим образом:

 COUNT(DISTINCT MY_PK)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...