2012-07-10 92 views
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

您需要從上述代碼中提取問題,因爲它沒有任何意義。嘗試在excel中做一個簡單的例子,然後把它轉換成你的db,一旦你設法讓一個工作系統脫離它。如果你仍然陷入僵局並想要回到這裏,那麼給我們一個例子來玩一玩,它有一個示例表和示例值;不只是一個模糊的查詢,因爲我們在這裏沒有任何線索可能是這些字段中的任何一個! 另外,varchar字段如何暗示權重? – deroby 2012-07-21 12:25:58

+0

簡短的答案是否定的,表面上看起來不正確,但正如deroby指出的那樣,目前還不清楚你正在努力做什麼,所以如果你能用英語說明,我們可以告訴你,如果你的代碼匹配。 加權平均的通常定義是總和(值*權重)/總和(權重) – 2012-09-19 20:56:17

回答

0

正如一些評論所提到的,你的問題是不是特別清楚,但如果你在一個表中有一些ValueWeight值:

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 

可以返回平均值(mean)和加權平均如下所示:

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