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]

また、重みを取得するために、2つのクエリで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 に答える