SQL 创建枢轴函数

标签 sql sql-server

我有一个如下所示的 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/

相关文章:

sql - 使用 SQL Anywhere 创建 .db 文件 - 现在使用 RazorSQL 查询它

sql-server - SSIS 日志记录到 SQL Server

mysql - SQL - 剩余/不属于

sql - 计算有多少列具有特定值

sql - SQL Developer 中的存储过程问题 - 没有 "refreshing" block 中所做的更改

php - 通过 php 计算行数比 SQL 中的 COUNT 更快?

sql-server - SQL Server 数据库还原错误 : specified cast is not valid. (SqlManagerUI)

c# - 如何在 EF-Code-First 中指定主键名称

c# - 文件上传和保存到数据库不正确

php - MySQL查询-即使相关表中不存在一个字段,也返回咨询