[英]How to use row_number() in Oracle SQL
运行下面的代码时收到错误-以下示例供您参考。
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 "".
我知道您想要的是:
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()
与您指定的结果有什么关系。
(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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.