これは、特定のフィールドを重みとしてフィールド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]である残りのフィールド。加重されていないので、明らかに加重されたくないので、外側のクエリでまっすぐに選択します。