如何解决使用SUM检索2个表中的记录并获取最新记录
我有一个表名“ claims”和“ entries”。 Claims表是父级,条目是子级。我正在尝试获取索赔表中的最新条目。这是简化后的数据:
Claims Table
rID code dateOn
1 A 2/12/2020
2 B 1/23/2020
3 A 7/11/2020
4 A 8/20/2020
Entries Table
eID rID type amount
1 1 cat 5
2 3 cat 5
3 4 dog 5
4 1 dog 5
5 1 cat 2
Desired Result
code latestCatDate latestDogDate DogTotal CatTotal
A 7/11/2020 8/20/2020 10 12
这是没有日期的我的SQL的样子...这很正常:
SELECT
code,SUM(case when entries.type='cat' then entries.amount else 0.0 end),SUM(case when entries.type='dog' then entries.amount else 0.0 end),FROM claims c INNER JOIN entries ON entries.rID=c.rID
WHERE c.code='A'
GROUP BY code
我对如何获取LatestDogDate和LatestCatDate感到困惑。
解决方法
您可以简单地向查询中添加更多条件聚合表达式,如下所示:
SELECT
c.code,MAX(CASE WHEN e.type = 'cat' THEN dateOn end) latestCatDate,MAX(CASE WHEN e.type = 'dog' THEN dateOn end) latestDogDate,SUM(CASE WHEN e.type = 'cat' THEN e.amount else 0.0 end) catTotal,SUM(CASE WHEN e.type = 'dog' THEN e.amount else 0.0 end) dogTotal
FROM claims c
INNER JOIN entries e ON e.rID = c.rID
WHERE c.code = 'A'
GROUP BY code
,
使用PIVOT
和GROUP BY
with
Claims as (
select * from (values
(1,'A','2/12/2020'),(2,'B','1/23/2020'),(3,'7/11/2020'),(4,'8/20/2020')
) x (rID,code,dateOn)
),Entries as (
select * from (values
(1,1,'cat',5),3,4,'dog',(5,2)
) x (eID,rID,type,amount)
),j as (
select c.*,e.type t2,e.eid,amount
from Claims c
join Entries e on c.rID = e.rID
),p1 as (
select p.code,t2,max(p.dateon) d,sum(cat) tot_cat,sum(dog) tot_dog
from j
pivot ( sum(amount) for type in ([cat],[dog])) p
group by p.code,t2
),p2 as (
select *
from p1
pivot (max(d) for t2 in ([cat],[dog])) p
)
select max(code) code,max(tot_cat) tot_cat,max(tot_dog) tot_dog,max(cat) latestCatDate,max(dog) latestDogDate
from p2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。