0

这是我需要根据字段 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 分组,我想也可以得到权重。

那么,就尝试使某些字段(具有 SUM 的字段)加权而言,这看起来是否正确?

我第一次需要一些手,因为我不确定我是否做对了。总和是在货币、数字等类型的字段中完成的,所以不要担心它们是否是正确的字段类型。[base] 的其余字段。没有加权,我不希望那些明显加权,所以在我的外部查询中直接选择它们。

4

1 回答 1

0

正如评论中的一些人所提到的,您的问题并不是特别清楚,但是如果您在表格中有一些Value和值:Weight

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
于 2016-12-05T12:43:22.893 回答