1

まず、Access 2007 で作業しています。

日付別に集計する 2 つのクエリがあります。

最初のものは、集計された日次の加重リターンを返します

SELECT Records.RecDate, Sum([YTD]*[Weight]) AS UnadjReturn
FROM Records
WHERE (((Records.[Class1])="eq") AND ((Records.[Class2])="ce"))
GROUP BY Records.RecDate;

結果:

RecDate UnadjReturn
11/27/2012  0.060778036742704
12/11/2012  0.075592752895318
12/14/2012  7.47574641136453E-02

また、ポートフォリオ全体に対する資産クラス内のすべての資産の重みを合計することで、毎日の合計クラス ポートフォリオの重みを返す別のクエリもあります。

SELECT Records.RecDate, Sum(Records.Weight) AS SumOfWeight
FROM Records
WHERE (((Records.[Class1])="eq") AND ((Records.[Class2])="ce"))
GROUP BY Records.RecDate;

戻り値:

RecDate SumOfWeight
11/27/2012  0.479327081236988
12/11/2012  0.483075813390315
12/14/2012  0.482791727874428

UnadjReturnここで、毎日のを掛ける統合クエリを書きたいと思いますSumOfWeight。私は2つを試しINNER JOINてから、次のように2つの変数を掛けました。

SELECT joined.RecDate, joined.UnadjReturn * joined.SumOfWeight as AdjReturn
FROM joined
(
SELECT Records.RecDate, Sum([YTD]*[Weight]) AS UnadjReturn
FROM Records
WHERE (((Records.[Class1])="eq") AND ((Records.[Class2])="ce"))
GROUP BY Records.RecDate
INNER JOIN
(
SELECT Records.RecDate, Sum(Records.Weight) AS SumOfWeight
FROM Records
WHERE (((Records.[Class1])="eq") AND ((Records.[Class2])="ce"))
GROUP BY Records.RecDate;
) t2
ON Records.RecDate = t2.RecDate
AS joined
)

これはまったく見栄えがよくありません。助言がありますか?2つのクエリを別のクエリでクエリすることで実行できますが、1つだけで処理したいと思います。

4

2 に答える 2

1

2 つの既存のクエリをそれぞれサブクエリとして使用し、INNER JOINそれらを一緒に使用します。SELECT(最初に各ステートメントの末尾にあるセミコロンを必ず破棄してください。)

SELECT
    sub1.RecDate,
    (sub1.UnadjReturn * sub2.SumOfWeight) AS AdjReturn
FROM
    (
        SELECT Records.RecDate, Sum([YTD]*[Weight]) AS UnadjReturn
        FROM Records
        WHERE Records.[Class1]="eq" AND Records.[Class2]="ce"
        GROUP BY Records.RecDate
    ) AS sub1
    INNER JOIN
    (
        SELECT Records.RecDate, Sum(Records.Weight) AS SumOfWeight
        FROM Records
        WHERE Records.[Class1]="eq" AND Records.[Class2]="ce"
        GROUP BY Records.RecDate
    ) AS sub2
    ON sub1.RecDate = sub2.RecDate;
于 2013-10-16T17:55:39.937 に答える
0

アクセスはわかりませんが、最終的には合計の積を探しているだけですか、それともサブクエリを使用する必要があるという要件 (アクセスベースまたはクラスプロジェクトまたは???) があります。

これがSQL Serverの答えです...

SELECT
    RecDate,
    (Sum([YTD]*[Weight]) * Sum(Records.Weight)) AS AdjReturn
FROM Records
        WHERE Records.[Class1]='eq' AND Records.[Class2]='ce'
        GROUP BY Records.RecDate
于 2013-10-16T18:23:16.363 に答える