基于现有视图按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
相关产品推荐
相关产品推荐

