1

如果可能,在以下情况下我需要您的帮助:我使用 Sql Server 2008 R2 并且我有这张表:

create table tblContracts 
([ContractID] [int] NOT NULL,
[PlotNumber] [nvarchar](150) NOT NULL,
[TotalArea] [numeric](12, 0) NULL,
[NotaryCosts] [numeric](12, 2) NULL,
[LandTax] [numeric](12, 2) NULL,
[OtherTaxes] [numeric](12, 2) NULL)

在这张表中,我可以有几条相同ContractID但不同的记录PlotNumber。我想PlotNumber根据相同的TotalArea位置来动态分配每个成本ContractID

例如,如果我有下一条记录:

1. ContractID=1,PlotNumber=1,TotalArea=100,NotaryCosts=300,LandTax=10,OtherTaxes=0 and
2. ContractID=1,PlotNumber=2,TotalArea=200,NotaryCosts=?,LandTax=20,OtherTaxes=0 

的公式NotaryCosts应该根据下一个公式动态更新:

NotaryCosts(对于每个PlotNumber)=sum(NotaryCosts与相同ContractID)/sum(TotalArea与相同ContractID)* TotalArea(针对特定PlotNumber

有可能以某种方式做到这一点吗?先感谢您!

4

1 回答 1

1

我非常同意 Thomas,我认为表格设计需要一些工作以及如何将数据输入系统。无论如何,这里有一个查询可以用作视图,为您提供您正在查找的计算总数,或者可以在更新语句中使用。要自动执行此操作,需要将此逻辑放置在触发器中

select
tc.ContractID
,tc.PlotNumber
,tc.TotalArea 
,tc.TotalArea *tcTotals.Cost_Per_Area as [Notary_Cost]
,tc.LandTax
,tc.OtherTaxes 
from
tblContracts  tc
inner join
(
select 
ContractID
,SUM(notaryCosts) as [sum_NotaryCost]
,SUM(TotalArea) as [sum_TotalArea]
,SUM(notaryCosts)/SUM(TotalArea) as [Cost_Per_Area]
from 
tblContracts
group by
ContractID
) tcTotals
on
tc.ContractID =tcTotals.ContractID 
于 2012-12-20T15:01:32.150 回答