Как использовать row_number () в Oracle SQL - PullRequest
0 голосов
/ 27 февраля 2019

Я получил ошибку при выполнении кода ниже - ниже приведен пример для вашей справки.

BRDB.EXPORT SHIPMENT (таблица базы данных)

 SHPMNT_REF  | SHIPMENT_TYPE
    123      | EHO
    456      | EHO
    789      | EHO

BRDB.EVENT_CODE (таблица базы данных)

 FILE_NO  | REMARKS   EVENT_CODE
 123      | TEST0      SIR
 123      | TEST1      SIR
 123      | TEST2      SIR
 456      | TEST3      SIR
 789      | TEST4      EEO

То, что я хочу показать в отчете, похоже на

  FILE NO    |  REMARKS
     123     |  TEST0,TEST1,TEST2
     456     |  TEST3

Ниже приведено мое кодирование

select min(X.SHPMNT_REF) as "House B/L #",
       listagg(case when SIR = 1 then X.REMARKS end, ',') within group (order by X.SHPMNT_REF) as "REMARKS(from SIR Event)"
FROM   (select ES.SHPMNT_REF,
               (select EE.REMARKS,
                       row_number() over (order by EE.FILE_NO)
                FROM   BRDB.EXPORT_EVENT EE
                where  EE.FILE_NO = ES.SHPMNT_REF
                and    EE.EVENT_CODE = 'SIR') as SIR
        from   BRDB.EXPORT_SHIPMENT ES)X
GROUP BY X.SHPMNT_REF

Ниже приведена ошибка, которую я получил.

Multiple columns are returned from a subquery that is allowed only one column.. SQLCODE=-412, SQLSTATE=42823, DRIVER=4.19.49. 2) [Code: -727, SQL State: 56098]  An error occurred during implicit system action type "2". Information returned for the error includes SQLCODE "-412", SQLSTATE "42823" and message tokens "".

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я понял, что вы хотите:

select ec.file_no,
       listagg(ec.remarks, ',') within group (order by ec.remarks) remarks
from event_code ec
where (ec.file_no, ec.event_code) not in
           (select SHPMNT_REF, SHIPMENT_TYPE
            from BRDB.EXPORT SHIPMENT
           )
      )
group by ec.file_no;

Я не понимаю, что row_number() связано с указанными вами результатами.

0 голосов
/ 27 февраля 2019
(select EE.REMARKS,
row_number() over (order by EE.FILE_NO) 
FROM BRDB.EXPORT_EVENT EE where EE.FILE_NO = ES.SHPMNT_REF 
                            and EE.EVENT_CODE = 'SIR'
) as Sir

этот верхний запрос возвращается в несколько столбцов, но вы использовали псевдоним Sir, что неверно, поэтому он вернул ошибку

, вы можете использовать объединение, чтобы ответить на подзапрос

select 
min(X.SHPMNT_REF) as "House B/L #",

listagg(case when SIR = 1 then X.REMARKS
end, ',') within group (order by X.SHPMNT_REF) as "REMARKS(from SIR Event)"

FROM
(select
ES.SHPMNT_REF,

row_number() over (order by EE.FILE_NO)  
  as SIR

from BRDB.EXPORT_SHIPMENT ES join BRDB.EXPORT_EVENT EE
on EE.FILE_NO = ES.SHPMNT_REF where EE.EVENT_CODE = 'SIR'
)X
GROUP BY X.SHPMNT_REF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...