繁体   English   中英

使用INNER JOIN合并2个查询,并从中获取计算列

[英]Consolidating 2 queries with an INNER JOIN and Get a calculated column from them

首先,我正在Access 2007中工作。

我有两个按日期汇总的查询。

第一个返回汇总的每日加权收益

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 我尝试了INNER JOIN这两个,然后按如下所示将两个变量相乘,

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个现有查询中的每一个用作子查询,并将它们内部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;

我不了解Access,但是您最终还是只是在寻找总和的乘积,还是有需要使用子查询的某些要求(基于Access的或类项目或???)?

这是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM