这是我的代码
select distinct sli.order_no,
sli.pkg_no,
case when line.primary_ind = 'Y' then sum(paid_amt) else 0 end as paid_amt,
line.pkg_li_no,
sum(case when sli.perf_no = 0 then 1 else 0 end) as num_seats_pur,
sli.status
from t_sub_line sli
left outer join t_line line on sli.li_seq_no = line.li_seq_no
where sli.order_no in (1,2)
group by
sli.order_no,
sli.pkg_no,
line.primary_ind,
line.pkg_li_no,
sli.status
having line.primary_ind = 'Y'
此代码产生此输出
order_no pkg_no paid_amt pkg_li_no num_seats_pur status
1 322 124.00 967 2 7
1 322 -124.00 992 2 4
2 854 253.00 952 1 7
2 854 -253.00 996 1 4
我真正需要返回的数据如下。我需要pay_amt字段的总和。
order_no pkg_no paid_amt pkg_li_no num_seats_pur status
1 322 0 967 2 7
2 854 0 996 1 4
即使我将状态更改为max(status),所以也不会对其进行分组。我没有sum_paid amt。
当我尝试此代码时:
sum(case when line.primary_ind = 'Y' then sum(paid_amt) else 0 end) as paid_amt,
我收到以下错误消息
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
答案 0 :(得分:1)
您需要做的几件事。
select distinct sli.order_no, sli.pkg_no, sum(paid_amt)as paid_amt, -- line.pkg_li_no, sum(case when sli.perf_no = 0 then 1 else 0 end) as num_seats_pur, sli.status from t_sub_line sli left join t_line line on sli.li_seq_no = line.li_seq_no where sli.order_no in (1,2) and line.primary_ind = 'Y' group by sli.order_no, sli.pkg_no, line.primary_ind, -- line.pkg_li_no, sli.status
其他说明: 我不确定您是否要按pkg_no或状态进行选择或分组,但是您知道要查找什么结果。如果它们是不同的值,那么将有不同的记录。
答案 1 :(得分:0)
我不确定您要完成什么,但是似乎您对查询的想法过多。尝试简化它。
仅供参考HAVING
在分组之后发生,WHERE
在分组之前发生,您甚至不需要CASE
select distinct sli.order_no,
sli.pkg_no,
sum(paid_amt) as paid_amt,
sum(case when sli.perf_no = 0 then 1 else 0 end) as num_seats_pur,
sli.status
from t_sub_line sli
left outer join t_line line on sli.li_seq_no = line.li_seq_no
where sli.order_no in (1,2)
and line.primary_ind = 'Y'
group by
sli.order_no,
sli.pkg_no,
sli.status