请告诉我这有什么问题:
select
p.date,
(SELECT COUNT (*) OVER (PARTITION BY p.ID_code)
FROM POOL_AREA.F_volume_GCOA p
WHERE p.end_volume_KN <> 0
AND p.date = '31-OCT-16'
AND (p.local_grade_MB IS NULL OR p.local_grade_MB ='0' OR p.local_grade_MB ='N')) AS ERROR_CNT
FROM POOL_AREA.F_volume_GCOA p
where p.date = '31-OCT-16';
过分区部分是问题,没有它,它可以工作。
错误详情:
ORA-01427:单行子查询返回多行 01427. 00000 - &#34;单行子查询返回多行&#34;
*原因:
*操作:
答案 0 :(得分:1)
我认为你真正追求的是条件计数 - 类似于:
select p.dt,
count(case when p.end_volume_kn != 0
and (p.local_grade_mb is null
or p.local_grade_mb in ('0', 'N'))
then 1
end) error_cnt
FROM POOL_AREA.F_volume_GCOA p
where p.dt = to_date('31/10/2016', 'dd/mm/yyyy')
group by p.dt;
答案 1 :(得分:0)
如评论中所述,类似这样(未经测试):
select
p.date,
t.val AS ERROR_CNT
FROM POOL_AREA.F_volume_GCOA p
JOIN (SELECT p.ID_code, COUNT (*) as val OVER (PARTITION BY p2.ID_code)
FROM POOL_AREA.F_volume_GCOA p2
WHERE p2.end_volume_KN <> 0
AND p2.date = '31-OCT-16'
AND (p2.local_grade_MB IS NULL OR p2.local_grade_MB ='0'
OR p.local_grade_MB ='N')) as t ON t.ID_Code = p.ID_code
where p.date = '31-OCT-16';
答案 2 :(得分:0)
这有效!
select
p.date,
(SELECT COUNT (*) FROM
(SELECT DISTINCT p.id_code
FROM POOL_AREA.F_volume_GCOA p
WHERE p.end_volume_KN <> 0
AND p.date = '31-OCT-16'
AND (p.local_grade_MB IS NULL OR p.local_grade_MB ='0' OR p.local_grade_MB ='N'))) AS ERROR_CNT
FROM POOL_AREA.F_volume_GCOA p
where p.date = '31-OCT-16';