首页 > 解决方案 > 您如何计算临时表中 sum 函数的平均值?

问题描述

我创建了一个临时表,其中列出了每个客户的发票,以及支付发票所需的天数。一个客户可以有多个发票。

而不是这个,我只希望临时表列出每个客户一次,以及支付所有发票所需的平均天数。

任何有关如何做到这一点的提示将不胜感激。

谢谢

select 
c.client_code,  
b.bill_num,
b.bill_date, 
ba.TRAN_DATE,
sum(datediff(Day,b.BILL_DATE, ba.TRAN_DATE)) as Days_To_Pay

into #tempG1

from blt_bill b
left outer join blt_billm bm on b.tran_uno = bm.bill_tran_uno
left outer join BLT_BILL_AMT ba on bm.BILLM_UNO = ba.BILLM_UNO
left outer join hbm_matter m on bm.matter_uno = m.matter_uno
left outer join hbm_client c on m.client_uno = c.client_uno

where b.total_bill_amt > 0.0
and bm.ar_status NOT IN ('P','X')
and ba.TRAN_TYPE in ('CR','crx')

group by c.client_code,b.bill_num,b.bill_date,ba.TRAN_DATE

select * from #tempG1

Drop Table #tempG1

标签: sql

解决方案


这听起来像一个简单的聚合:

select c.client_code, avg(datediff(Day, b.BILL_DATE, ba.TRAN_DATE)) as Days_To_Pay
from blt_bill b join
     blt_billm bm
     on b.tran_uno = bm.bill_tran_uno join
     BLT_BILL_AMT ba
     on bm.BILLM_UNO = ba.BILLM_UNO join
     hbm_matter m on bm.matter_uno = m.matter_uno join
     hbm_client c 
     on m.client_uno = c.client_uno
where b.total_bill_amt > 0.0 and
      bm.ar_status not in ('P', 'X') and
      ba.TRAN_TYPE in ('CR', 'crx')
group by c.client_code;

请注意,您不需要外部连接。无论如何,该where子句将它们中的大多数变成了s。inner join另外,如果您按客户端代码进行聚合,那么您可能想要一个非NULL值。


推荐阅读