Sql server SQL-求和聚合子查询
这是我的密码Sql server SQL-求和聚合子查询,sql-server,tsql,sum,subquery,case,Sql Server,Tsql,Sum,Subquery,Case,这是我的密码 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 nu
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
我真正需要的是返回以下数据。我需要“已付金额”字段的总和
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
即使我将status更改为max(status),它也不会在上面分组。我没有支付金额
当我尝试此代码时:
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.
我不确定你想完成什么,但似乎你对这个问题想得太多了。尽量简化它。 仅供参考,
在分组之后发生
,其中发生在分组之前,您甚至不需要案例
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
你需要做几件事
我不确定您是否希望根据pkg_no或status进行选择或分组,但您更了解我们想要的结果。如果它们是不同的值,则会有不同的记录。为什么选择pkg_li_no和status的值?@CaiusJard这是一个嵌套查询,用于连接(外部/父查询)。pkg_li_no和order_noDid您是否尝试将sum移到外部(删除case语句内部的sum)?我不认为你能得到一个总和,尽管我以前从未尝试过:sum(line.primary\u ind='Y'then paid\u amt else 0 end)as paid_amt@TinyHaitian我没有,但我只是尝试了一下,嵌套查询返回相同的值。我们的想法是,我们需要抑制一些总和为零的记录。我想不出另外一种方法来实现这一点,我的意思是“在您想要的输出中,您可以选择7或4作为状态。为什么pkgno 322获得状态7,pkgno 854获得状态4?一个是最大值,一个是最小值。这是不一致的,很难编码”。pkg_Liu_no也是一样-你选择了一个最大值,另一个最小值。为什么?(首先,我们必须确定您头脑中的算法,然后才能将其转换为sql)
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