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

如何在T-SQL中让子查询共享主查询条件且保留自身特定条件?

解决方案

你的原查询存在两个问题:一是主查询过滤后会返回多行重复的汇总结果,二是子查询没有正确继承value > 1500的过滤逻辑(实际是全表求和)。以下几种方法可以实现你的需求,且只需要写一次过滤条件:

方法1:条件聚合(最简洁)

直接在主查询中用CASE表达式配合SUM完成分组汇总,过滤条件仅需写一次:

SELECT
    SUM(CASE WHEN status_FK = 1 THEN [value] ELSE 0 END) AS status1,
    SUM(CASE WHEN status_FK = 2 THEN [value] ELSE 0 END) AS status2
FROM @table
WHERE [value] > 1500;

方法2:CTE预过滤(适合复用过滤数据)

先用CTE筛选出符合value > 1500的数据,再基于CTE做汇总,后续如果有其他计算可以直接复用这个CTE:

WITH FilteredData AS (
    SELECT status_FK, [value]
    FROM @table
    WHERE [value] > 1500
)
SELECT
    SUM(CASE WHEN status_FK = 1 THEN [value] ELSE 0 END) AS status1,
    SUM(CASE WHEN status_FK = 2 THEN [value] ELSE 0 END) AS status2
FROM FilteredData;

方法3:PIVOT(适合多状态列扩展)

如果后续需要增加更多status的汇总列,用PIVOT语法更易扩展:

WITH FilteredData AS (
    SELECT status_FK, [value]
    FROM @table
    WHERE [value] > 1500
)
SELECT [1] AS status1, [2] AS status2
FROM FilteredData
PIVOT (
    SUM([value])
    FOR status_FK IN ([1], [2])
) AS PivotTable;

结果说明

以上三种方法都会返回正确的汇总结果:

  • status1:所有status_FK=1且value>1500的记录总和(2000+2000=4000)
  • status2:所有status_FK=2且value>1500的记录总和(3000+2000+3000=8000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:36:23