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

SQL如何将同表两列测试总数字段合并为单个Total_Test字段

方案说明

你可以通过UNION/UNION ALL(也支持先把中间结果存入临时表再做拼接)实现字段纵向堆叠的需求,但无法通过CASE语句实现该需求:CASE属于行级逻辑运算,仅能对每行的单个输出字段做值判断,无法将1行数据拆分为2行实现纵向堆叠。

如果没有去重需求,更推荐使用UNION ALL,性能远高于需要全局去重的UNION,也和你给出的示例效果匹配。


改造后的查询语句

WITH cte AS
(
    SELECT ID,
           TEST_DATE, 
           CATEGORY_A_TOTAL_TEST, 
           CATEGORY_B_TOTAL_TEST, 
           RIGHT(TEST_DATE,4) AS Test_year
    FROM TESTS
) 

SELECT t.ID, t.TEST_DATE, t.Test_year, t.Total_Test, b.Average, b.NationalAverage
FROM (
    -- 提取CATEGORY_A的测试值
    SELECT ID, TEST_DATE, Test_year, CATEGORY_A_TOTAL_TEST AS Total_Test
    FROM cte
    UNION ALL
    -- 提取CATEGORY_B的测试值
    SELECT ID, TEST_DATE, Test_year, CATEGORY_B_TOTAL_TEST AS Total_Test
    FROM cte
) t
LEFT JOIN Averages b 
ON t.Test_year = b.Test_Year

如果需要区分堆叠后每个数值的原始来源,可以在子查询中加一个类别标识字段:

-- 子查询部分示例
SELECT ID, TEST_DATE, Test_year, 'A' AS Category_Type, CATEGORY_A_TOTAL_TEST AS Total_Test FROM cte
UNION ALL
SELECT ID, TEST_DATE, Test_year, 'B' AS Category_Type, CATEGORY_B_TOTAL_TEST AS Total_Test FROM cte

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:54:05