Tsql 这是做加权平均值的正确方法吗?

Tsql 这是做加权平均值的正确方法吗?,tsql,Tsql,这里是初始查询,我需要根据字段KLA作为权重,将某些字段设置为加权平均值。KLA是一个varchar字段 select eer.Market, eer.KLA, eer.Term, case scdesc when 'ics' then 'Act' else eer.ScDesc end as ScDesc, eer.Term As Term_Anual, eer.VaMonths, eer.RentPri

这里是初始查询,我需要根据字段KLA作为权重,将某些字段设置为加权平均值。KLA是一个varchar字段

select  eer.Market,    
    eer.KLA,
    eer.Term,
    case  scdesc when 'ics' then 'Act' else eer.ScDesc end as ScDesc,   
    eer.Term As Term_Anual,    
    eer.VaMonths,    
        eer.RentPrice,    
        eer.BuyPrice,          
    eer.TransactionID
from View1 eer
WHERE ((@Term = 'Long Term' and Term_Anual > 11)    
  OR (@Term = 'Short Term' and Term_Anual < 12))    
  and (ArchiveID in (@ArchiveID))
order by eer.market,
     eer.KLA,
     eer.ScDesc
这是我第一次尝试做加权平均,所以有几件事我不确定

所以我所做的就是尝试通过使用连接创建一个CTE

SELECT  [base].Market,
    [base].MSA,
    [base].ArchiveID,
    [base].TransactionID
    [base].ScDesc,
    SUM([base].KLA) * [weighted].KLA / SUM([weighted].KLA) as KLA,
    SUM([base].VaMonths) * [weighted].VaMonths / SUM([weighted].VaMonths) as VaMonths,
    SUM([base].RentPrice) * [weighted].RentPrice / SUM([weighted].RentPrice) as RentPrice,
    SUM([base].BuyPrice) * [weighted].BuyPrice / SUM([weighted].BuyPrice) as BuyPrice       
FROM View1 [base]
INNER JOIN
(
    select  eer.Market,    
        eer.KLA,
        eer.Term,
        case  scdesc when 'ics' then 'Act' else eer.ScDesc end as ScDesc,   
        eer.Term As Term_Anual,    
        eer.VaMonths,    
            eer.RentPrice,    
            eer.BuyPrice,          
        eer.TransactionID
from View2 eer
WHERE((@Term = 'Long Term' and Term_Anual > 11)    
  OR (@Term = 'Short Term' and Term_Anual < 12))    
  and (ArchiveID in (@ArchiveID))
order by eer.market,
     eer.KLA,
     eer.ScDesc
) as [weighted]
另外,我不知道我应该在哪里,或者我是否应该在两个查询中按KLA分组,我猜也可以得到权重

那么,在尝试将一些字段设置为具有和加权的字段时,这看起来正确吗


我需要一些手,通过第一次,因为我没有信心,我相信我这样做是正确的。求和是在货币、数字等字段类型的字段中进行的,因此不必担心它们是否是正确的字段类型。属于[base]的其余字段。没有加权,我不希望那些明显加权,所以在我的外部查询中直接选择它们。

正如一些评论中提到的,您的问题不是特别清楚,但是如果您在表中有一些值和权重值:

DECLARE @SampleData TABLE (
    Value DECIMAL(3,2),
    [Weight] DECIMAL(3,2)
)

INSERT INTO @SampleData
SELECT 6, 3
UNION
SELECT 4, 1
UNION
SELECT 9, 1
UNION
SELECT 5, 6
UNION
SELECT 3, 1
UNION
SELECT 1, 1
UNION
SELECT 3, 2
UNION
SELECT 4, 1
您可以按如下方式返回平均值和加权平均值:

SELECT  AVG(Value) AS Mean,
        AVG(Value * [Weight]) AS WeightedMean
FROM @SampleData

您需要从上面的代码中提取您的问题,因为它实际上没有意义。试着用excel或其他软件做一个简单的例子,一旦你成功地从中获得了一个工作系统,就把它翻译成数据库。如果你最终还是被困在这里,想回到这里,那么给我们一个示例,其中有一个示例表和示例值;不仅仅是一个模糊的查询,因为我们不知道这些字段可能是什么!此外,varchar字段如何表示权重?简短的回答是否定的,表面上看这并不正确,但正如deroby指出的,不清楚您试图做什么,因此如果您可以用英语陈述,我们可以告诉您代码是否匹配。加权平均值的通常定义是sumvalue*weight/sumweight