You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012中如何合并两个临时表的透视查询结果?

解决SQL Server 2012中两个透视查询合并的问题

你的问题出在UNION ALL的用法和透视查询的结构上——不能在UNION的每个分支里使用INTO创建临时表,而且直接把PIVOT跟在筛选语句后的语法也不符合SQL Server的要求。下面给你两种可行的解决方案,根据你的需求选择:

方案一:先合并数据集再透视(推荐,更高效)

先把两个筛选条件下的数据集合并,再一次性执行透视操作,这样只需要做一次透视,性能更好,也更简洁:

USE MyDatabase;
WITH CombinedData AS (
    -- 第一个查询的原始数据
    SELECT [Col A], [Col B], [Col C]
    FROM MyList 
    WHERE [Date] >= '2018-01-01'
    UNION ALL
    -- 第二个查询的原始数据
    SELECT [Col A], [Col B], [Col C]
    FROM MyList 
    WHERE [StayDate] >= '2018-01-01' AND [DateCreated] <= '2018-01-27'
)
SELECT *
FROM CombinedData
PIVOT(
    SUM([Col B]) 
    FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])
) AS PVTTable;

说明:

  • 用CTE(WITH子句)把两个筛选后的数据集合并成一个逻辑表CombinedData
  • 对这个合并后的表执行透视,直接得到你需要的统一结果,不需要临时表

方案二:分别透视后再合并(保留来源标识)

如果你需要区分结果里的每行数据来自哪个原始查询,可以给每个透视结果添加一个标识列,再用UNION ALL合并:

USE MyDatabase;
-- 第一个透视结果,添加来源标识
SELECT 'Query1' AS SourceQuery, *
FROM (
    SELECT [Col A], [Col B], [Col C]
    FROM MyList 
    WHERE [Date] >= '2018-01-01'
) AS Query1Data
PIVOT(
    SUM([Col B]) 
    FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])
) AS PVT1
UNION ALL
-- 第二个透视结果,添加来源标识
SELECT 'Query2' AS SourceQuery, *
FROM (
    SELECT [Col A], [Col B], [Col C]
    FROM MyList 
    WHERE [StayDate] >= '2018-01-01' AND [DateCreated] <= '2018-01-27'
) AS Query2Data
PIVOT(
    SUM([Col B]) 
    FOR [Col A] IN ([Jan], [Feb], [Mar], [Apr], [May], [Jun], [Jul], [Aug], [Sep], [Oct], [Nov], [Dec])
) AS PVT2;

说明:

  • 每个透视操作都先通过子查询获取原始筛选数据,再执行透视
  • 添加SourceQuery列后,你能清楚看到每行结果来自第一个还是第二个查询
  • 确保两个透视后的列结构完全一致(包括顺序和数据类型),UNION ALL才能正常工作

为什么你的原写法无效?

  1. INTO不能在UNION分支中使用:INTO是用来创建新表的,每个UNION语句只能有一个INTO(如果要用的话),但这里你根本不需要临时表,直接用CTE或子查询更合适。
  2. 透视查询的语法错误:SQL Server要求透视操作的源数据必须是一个子查询、CTE或表,不能直接跟在SELECT ... WHERE后面。

内容的提问来源于stack exchange,提问作者user3115933

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:47:20