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

基于现有视图按type实现年度列求和与yes/no标识的SQL方案问询

基于现有视图创建满足条件的新视图方案

嘿,这个需求用SQL的条件表达式和聚合/窗口函数就能轻松实现,我分两种常见场景给你具体代码,你可以根据实际业务需求选:

场景1:将type≠1的记录按年份聚合求和,与type=1的记录合并

如果你的需求是把所有type=1的记录单独保留,而type≠1的记录按年份汇总成一条求和记录,同时添加标识字段,代码如下:

CREATE VIEW new_target_view AS
-- 先筛选出type=1的记录,标记为'yes'
SELECT 
    year,
    type,
    target_column AS amount, -- 替换成你需要的求和列名
    'yes' AS is_special_type
FROM original_view -- 替换成你的原视图名称

UNION ALL

-- 对type≠1的记录按年份分组求和,标记为'no'
SELECT 
    year,
    NULL AS type, -- 如果需要保留type的非1值,可以用MIN(type),但聚合后只能留一个值,按需调整
    SUM(target_column) AS total_amount,
    'no' AS is_special_type
FROM original_view
WHERE type != 1
GROUP BY year;

场景2:每条记录保留原数据,同时附加年份求和结果与标识字段

如果需要保留原视图的所有记录,同时给每条记录加上:

  • 标识字段(type=1为'yes',否则'no')
  • 该记录所属年份下所有type≠1的行的求和值

这时候用窗口函数更合适,代码示例:

CREATE VIEW new_target_view AS
SELECT 
    year,
    type,
    target_column AS amount,
    -- 生成标识字段
    CASE WHEN type = 1 THEN 'yes' ELSE 'no' END AS is_special_type,
    -- 计算当前年份所有type≠1的列总和
    SUM(CASE WHEN type != 1 THEN target_column ELSE 0 END) OVER (PARTITION BY year) AS year_total_non_type1
FROM original_view; -- 替换成你的原视图名称

注意事项

  • 把代码里的target_column替换成你实际需要求和的列名
  • original_view换成你的现有视图名称
  • 字段名比如is_special_type、year_total_non_type1可以根据你的业务习惯修改

内容的提问来源于stack exchange,提问作者Sebastián

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:16:16