Sql 如何从现有行重新分配金额

Sql 如何从现有行重新分配金额,sql,database,Sql,Database,尝试使用销售订单记录创建数据库,并根据某些规则在具有不同值的销售订单行项目之间重新分配交易总价 例如,如果我有一个100美元的销售订单,其中有两行,由软件和维护组成,假设软件的合同价格为100美元,维护是免费的。如果我要从软件到维护分配50美元,那么每一行都有50美元的分配值,那么最好的方法是什么 我正在考虑添加另一列/字段,在该列/字段中,我们保留每个销售订单的原始金额,但尝试查看如何应用特定规则(例如比较的上限),并将销售订单总值分配到不同于合同金额的金额中 请注意,我试图计算分配的金额,因

尝试使用销售订单记录创建数据库,并根据某些规则在具有不同值的销售订单行项目之间重新分配交易总价

例如,如果我有一个100美元的销售订单,其中有两行,由软件和维护组成,假设软件的合同价格为100美元,维护是免费的。如果我要从软件到维护分配50美元,那么每一行都有50美元的分配值,那么最好的方法是什么

我正在考虑添加另一列/字段,在该列/字段中,我们保留每个销售订单的原始金额,但尝试查看如何应用特定规则(例如比较的上限),并将销售订单总值分配到不同于合同金额的金额中

请注意,我试图计算分配的金额,因为当我创建销售订单数据时,分配的金额最初将为空

谢谢大家


这取决于您的数据库,也取决于您的“特定规则”,但为了让您开始学习,以下内容将适用于SQL Server和其他可能的应用程序

要将销售订单(so)的所有收入平均分配到该销售订单中的所有行(行),请执行以下操作:

update tbl
set Alloc = new_alloc
from
(select 
   so, 
   line, 
   (sum(contracted) over (partition by so))/
     (count(line) over (partition by so)) as new_alloc
 from tbl) as sub
 where sub.so = tbl.so
   and sub.line = tbl.lineenter code here
要根据行描述应用自定义规则(在本例中,80%为“软件”20%为“维护”):


请提供示例数据、所需结果和适当的数据库标记。刚刚更新。我想你知道我的来历:)请看一下。非常感谢。
update tbl
set Alloc = new_alloc
from
(select 
   so, 
   line, 
   case when line_description = 'Software' then 0.8 
        when line_description = 'Maintenance' then 0.2 
        end *
     sum(contracted) over (partition by so) as new_alloc
 from tbl) as sub
 where sub.so = tbl.so
   and sub.line = tbl.line