我有一个如下所示的 SQL 代码:
select cast(avg(age) as decimal(16,2)) as 'avg' From
(select distinct acct.Account, cast(Avg(year(getdate())- year(client_birth_date)) as decimal(16,2)) as 'Age'
from WF_PM_ACCT_DB DET
inner join WF_PM_ACCT_DET_DB ACCT
ON det.Account = acct.Account
where (acct_closing_date is null or acct_closing_date > '2017-01-01')
and Acct_Open_Date < '2017-01-01'
group by acct.Account
) x
基本上,这给我的是一个简单的单元格答案,即 Acct_Open_Date < '2017-01-01' 年帐户的平均年龄。我是一个 ameture,所以我每次都会更改日期并一次又一次运行查询以获取剩余的年份。有没有一种简单的方法可以让所有年份作为列标题,仅一行包含该年的平均帐户年龄。
请注意,帐户关闭日期为空意味着帐户从未关闭,我必须将其更改为小于分析年份,以便真实了解当时存在的平均帐户年龄
感谢任何帮助。谢谢。
最佳答案
您可以通过将多个日期包含在单个派生表中来运行此操作:
with dates as (
select cast('2017-01-01' as date) as yyyy union all
select cast('2016-01-01' as date)
)
select yyyy, cast(avg(age) as decimal(16,2)) as avg_age
From (select dates.yyyy, acct.Account,
cast(Avg(year(getdate())- year(client_birth_date)) as decimal(16,2)) as Age
from dates cross join
WF_PM_ACCT_DB DET inner join WF_PM_ACCT_DET_DB
ACCT
on det.Account = acct.Account
where (acct_closing_date is null or acct_closing_date > dates.yyyy) and
Acct_Open_Date < dates.yyyy
group by acct.Account, dates.yyyy
) x
group by yyyy
order by yyyy;
关于SQL 创建枢轴函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948316/