根据其他行中的值计算值

时间:2020-04-30 18:14:51

标签: sql sql-server case

我试图根据是否有多行满足条件来划分一列的值。对于此示例,所有书籍都有一位“主要”作者,该作者将始终获得满分。书籍也可以有一个或多个“第二”作者,如果一本书有多个“第二”作者,则得分将在“第二”作者之间平均分配。

所需的输出是使最后一列为“ NewPoints” 示例:

第一本书的得分值为1,只有一位第二作者,因此第二作者获得了全部的1得分。

第二本书的得分值为1,并且有两个第二作者,因此,第二作者的得分均为0.5。

第三本书的得分值为0.5,并且有三位第二作者,因此,第二作者的得分均为0.16。

content

1 个答案:

答案 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
相关问题