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

如何在SQL Server 2014的TSQL中比较两个SELECT语句的结果?

对比两个TSQL查询结果的差异(SQL Server 2014)

要清晰对比这两个查询的结果差异,我们可以用**CTE(公用表表达式)**把两个查询的结果临时存储,再通过FULL OUTER JOIN合并数据集,这样就能完整覆盖所有出现过的CallDisposition,包括只在其中一个查询里出现的值。

实现代码

WITH Query1 AS (
    SELECT 
        CallDisposition, 
        COUNT(CallDisposition) AS Count1
    FROM [bs_Reporting].[dbo].[Termination_Call_Detail] 
    WHERE (DateTime BETWEEN DATEADD(minute, @timespan, CONVERT(datetime2, GETDATE() + @count)) 
                        AND CONVERT(datetime2, GETDATE() + @count)) 
    GROUP BY CallDisposition
),
Query2 AS (
    SELECT 
        CallDisposition, 
        COUNT(CallDisposition) AS Count2
    FROM [bs_Reporting].[dbo].[Termination_Call_Detail] 
    WHERE DateTime >= DATEADD(minute, @timespan, CONVERT(datetime2, GETDATE())) 
    GROUP BY CallDisposition
)
SELECT 
    COALESCE(q1.CallDisposition, q2.CallDisposition) AS CallDisposition,
    ISNULL(q1.Count1, 0) AS Query1_Count,
    ISNULL(q2.Count2, 0) AS Query2_Count,
    ISNULL(q1.Count1, 0) - ISNULL(q2.Count2, 0) AS Count_Difference
FROM Query1 q1
FULL OUTER JOIN Query2 q2 ON q1.CallDisposition = q2.CallDisposition
-- 可选:只显示有差异的行
-- WHERE ISNULL(q1.Count1, 0) <> ISNULL(q2.Count2, 0)
ORDER BY CallDisposition;

代码说明

  1. CTE定义:把两个原始查询分别存入Query1和Query2,给计数列起不同别名避免冲突。
  2. 全外连接:FULL OUTER JOIN确保不管CallDisposition只在哪个查询中存在,都会被包含在结果里。
  3. 空值处理:用COALESCE获取有效的CallDisposition值,用ISNULL把不存在的计数转为0,方便后续计算差值。
  4. 差异计算:Count_Difference列直接展示两个查询计数的差值,正数表示Query1的计数更高,负数则相反。

基于你提供的示例数据,运行结果如下

CallDispositionQuery1_CountQuery2_CountCount_Difference
224-2
3871
4862
602-2
72122-1
1016610
1373870335
144567-22
1514113
19844
2601-1
284162-21
2912102
527679-3
55101

如果你只需要看到有差异的行,只需要把代码里的WHERE注释去掉即可。

内容的提问来源于stack exchange,提问作者Jan Rühle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:12:41