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]字段。没有加权,我不希望那些加权明显,所以选择他们直接在我的外部查询。
您需要从上述代码中提取问题,因为它没有任何意义。尝试在excel中做一个简单的例子,然后把它转换成你的db,一旦你设法让一个工作系统脱离它。如果你仍然陷入僵局并想要回到这里,那么给我们一个例子来玩一玩,它有一个示例表和示例值;不只是一个模糊的查询,因为我们在这里没有任何线索可能是这些字段中的任何一个! 另外,varchar字段如何暗示权重? – deroby 2012-07-21 12:25:58
简短的答案是否定的,表面上看起来不正确,但正如deroby指出的那样,目前还不清楚你正在努力做什么,所以如果你能用英语说明,我们可以告诉你,如果你的代码匹配。 加权平均的通常定义是总和(值*权重)/总和(权重) – 2012-09-19 20:56:17