我试图根据是否有多行满足条件来划分一列的值。对于此示例,所有书籍都有一位“主要”作者,该作者将始终获得满分。书籍也可以有一个或多个“第二”作者,如果一本书有多个“第二”作者,则得分将在“第二”作者之间平均分配。
所需的输出是使最后一列为“ NewPoints” 示例:
第一本书的得分值为1,只有一位第二作者,因此第二作者获得了全部的1得分。
第二本书的得分值为1,并且有两个第二作者,因此,第二作者的得分均为0.5。
第三本书的得分值为0.5,并且有三位第二作者,因此,第二作者的得分均为0.16。
content
答案 0 :(得分:0)
如果您只有两种类型:
select b.BookID, b.BookName, bd.points, a.AuthorName, a.AuthorType,
(case when bd.AuthorType = 'Primary' then bd.points
else bd.points / count(*) over (partition by b.BookId, bd.AuthorType)
end) as new_points
from Book b left join
bookdetails as bd
on b.BookID = bd.BookID_FK left join
authors a
on bd.AuthorBookID = a.AuthorBookID;
如果您有两种以上的类型,并且想专注于Secondary
,那么:
(case when bd.AuthorType = 'Primary'
then bd.points
when bd.AuthorType = 'Secondary'
then bd.points / count(*) over (partition by b.BookId, bd.AuthorType)
end) as new_points