首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询从过去三年的31/03获取数据

SQL查询从过去三年的31/03获取数据
EN

Stack Overflow用户
提问于 2022-01-18 16:42:15
回答 1查看 67关注 0票数 0

我已经创建了上面的查询,它给了我的奖金标记到人的sysdate。

代码语言:javascript
复制
select 
    person_number ,
    peef.effective_start_Date,
    peef.value Amount
from 
    per_all_people_f papf,
    pay_element_entries_f peef
where 
    papf.person_id = peef.person_id
    and PEEF.element_name in ('Bonus')
    and sysdate between peef.effective_start_Date and peef.effective_end_Date

我想对上面的查询进行调整,以得到过去三年截至31/3的金额,即从31/3/2021、31/03/2020、31/03/2009改为sysdate。

输出就像-

代码语言:javascript
复制
Person_NUMBER   effective_start_Date      current_Amount            2021_AMOUNT         2020_AMOUNT         2019_AMOUNT

如何调整相同的查询并更改sysdate条件以查找过去三年的数据以及2021_amount、2020_amount和2019_amount列的数据

EN

回答 1

Stack Overflow用户

发布于 2022-01-18 18:04:37

可以将最后一行作为条件项移到选择列表中,例如

代码语言:javascript
复制
SELECT person_number, peef.effective_start_Date, 
       peef.value AS current_amount,
       CASE WHEN date'2021-03-31' BETWEEN peef.effective_start_Date AND peef.effective_end_Date 
            THEN peef.value 
             END AS 2021_amount,
       CASE WHEN date'2020-03-31' BETWEEN peef.effective_start_Date AND peef.effective_end_Date 
            THEN peef.value 
             END AS 2020_amount,
       CASE WHEN date'2019-03-31' BETWEEN peef.effective_start_Date AND peef.effective_end_Date 
            THEN peef.value 
             END AS 2019_amount                          
  FROM per_all_people_f papf
  JOIN pay_element_entries_f peef
    ON peef.person_id = papf.person_id
 WHERE peef.element_name = 'Bonus'

为了获得当前显示的结果,但是在这种情况下,将有多行包含NULL值的values列。我怀疑您需要获得聚合的结果,以显示汇总的金额,然后考虑添加SUM()聚合,例如

代码语言:javascript
复制
SELECT person_number, peef.effective_start_Date, 
       SUM( peef.value ) AS current_amount,
       SUM( CASE WHEN date'2021-03-31' BETWEEN peef.effective_start_Date AND peef.effective_end_Date 
                 THEN peef.value 
                  END ) AS 2021_amount,
       SUM( CASE WHEN date'2020-03-31' BETWEEN peef.effective_start_Date AND peef.effective_end_Date 
                 THEN peef.value 
                  END ) AS 2020_amount,
       SUM( CASE WHEN date'2019-03-31' BETWEEN peef.effective_start_Date AND peef.effective_end_Date 
                 THEN peef.value 
                  END ) AS 2019_amount                          
  FROM per_all_people_f papf
  JOIN pay_element_entries_f peef
    ON peef.person_id = papf.person_id
 WHERE peef.element_name = 'Bonus'
 GROUP BY person_number, peef.effective_start_Date 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70759254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档