基本的 UNION 或 JOIN

Basic UNION or JOIN

我已经制定了一些提取我想要的数据的查询,但我似乎无法将它们放在一起。我想将所有信息集中在一个 table 中。

SELECT MarketIdentifier, CurveType, VintageYear, Rate = Avg(RateValue) FROM #RateCurves GROUP BY MarketIdentifier, CurveType, VintageYear ORDER BY MarketIdentifier, CurveType, VintageYear

SELECT MarketIdentifier, CurveType, VintageYear, Obligation = Avg(ObligationValue) FROM #ObligationCurves GROUP BY MarketIdentifier, CurveType, VintageYear ORDER BY MarketIdentifier, CurveType, VintageYear

以上两个 select 语句导致两个不同的 tables,一个具有以下 headers:

MarketIdentifier, CurveType, VintageYear, Rate

另一个:

MarketIdentifier, CurveType, VintageYear, Obligation

我只是希望输出为:

MarketIdentifier, CurveType, VintageYear, Obligation, Rate

我已经尝试了 JOIN、UNION、UNION ALL 等的多种不同组合。其中一些会产生所需的 table 格式但值不正确。我确定这是我所缺少的非常基本的东西。

两个句子中的字段必须相同。试一试:

SELECT MarketIdentifier, CurveType, VintageYear, NULL as Obligation , Rate = Avg(RateValue) 
FROM #RateCurves 
GROUP BY MarketIdentifier, CurveType, VintageYear 
ORDER BY MarketIdentifier, CurveType, VintageYear
UNION
SELECT MarketIdentifier, CurveType, VintageYear, Obligation = Avg(ObligationValue), NULL as Rate
FROM #ObligationCurves 
GROUP BY MarketIdentifier, CurveType, VintageYear 
ORDER BY MarketIdentifier, CurveType, VintageYear;

一种方法是将 group by 结果放入派生的 table 和 t1t2 中,然后按分组依据的列加入。

下面的查询假定两个查询的每个(MarketIdentifier、CurveType、VintageYear)组合都有 1 行。即不会有一个 table 而不是另一个的 (MarketIdentifier, CurveType, VintageYear)。否则,您必须根据需要执行左联接或全联接。

select * from (
    your first query here
) t1 inner join (
    your second query here
) t2 on t2.MarketIdentifier = t1.MarketIdentifier
and t2.CurveType = t1.CurveType
and t2.VintageYear = t1.VintageYear