SQL Server中如何将两个独立查询结果合并为一张表?
合并两个查询结果的SQL语句
你可以将两个查询作为子查询,通过Store字段进行内连接(INNER JOIN),因为两个结果集中的Store是一一对应的。最终的SQL语句如下:
SELECT sales.Store, sales.Type, sales.Size, sales.tot_sales, sales.hol_sales, sales.non_hol_sales, features.avg_unempl, features.avg_CPI, features.avg_temp FROM ( -- 第二个查询:销售数据 SELECT tra.Store, sto.Type, sto.Size, ROUND(SUM(CASE WHEN IsHoliday IN (0,1) THEN Weekly_Sales END),2) AS tot_sales, ROUND(SUM(CASE WHEN IsHoliday = 1 THEN Weekly_Sales END),2) AS hol_sales, ROUND(SUM(CASE WHEN IsHoliday = 0 THEN Weekly_Sales END),2) AS non_hol_sales FROM PortfolioProjects..train tra JOIN PortfolioProjects..stores sto ON tra.Store = sto.Store GROUP BY tra.Store, sto.Size, sto.Type ) AS sales INNER JOIN ( -- 第一个查询:特征平均值 SELECT Store, ROUND(AVG(Unemployment),2) AS avg_unempl, ROUND(AVG(CPI),2) AS avg_CPI, ROUND(AVG(Temperature),2) AS avg_temp FROM PortfolioProjects..features GROUP BY Store ) AS features ON sales.Store = features.Store ORDER BY sales.Store;
说明:
- 把两个独立查询分别放在括号里作为子查询并命名(
sales和features),方便后续连接引用。 - 使用
INNER JOIN确保只保留两个子查询中都存在的Store记录(你的案例中所有Store都匹配,结果会包含全部6条)。 - 将第二个查询里的
CASE WHEN IsHoliday = 1 OR IsHoliday = 0简化成IsHoliday IN (0,1),逻辑等价且更简洁。 - 最后统一用
ORDER BY排序,避免子查询里的排序影响性能。
执行这个语句后,你会得到包含所有字段的合并表,字段顺序可根据需求自行调整。
内容的提问来源于stack exchange,提问作者Darnell
相关产品推荐
相关产品推荐

