首页 > 解决方案 > SQL 在 SUM 查询中创建视图或过程而不添加新列?

问题描述

假设我有一些示例数据table_name_a如下:

    code    val    remark   date
   -----------------------------------
1   00001    500    111      20191108
2   00001   1000    222      20191107
3   00002    200    111      20191108
4   00002    400    222      20191108
5   00001    200    333      20191108
6   00001    400    444      20191108

我有一个如下的 SQL 查询:

SELECT t.code, 
       sum(CASE WHEN t.remark IN ('111', '222', '333')
       THEN t.value ELSE 0 END) AS sum_123
FROM table_name_a t
    WHERE t.code='00001' and t.date='20191108'
GROUP BY t.code

输出如下:

    code    sum_123
   ------------------
1   00001    1100        

现在我想在 SQL 查询(Oracle)之上创建一个视图或过程,我们不想要一个新列,是否可以让sum_123存储到remark列中?假设我使用下面的 SQL 查询

SELECT t.code, t.value
FROM table_name_a t 
    WHERE t.remark='sum_123' and t.code='00001' and t.date='20191108'
GROUP BY t.code

如果我使用上面的 SQL 查询,我的预期输出如下:

    code    val        remark          date
   ------------------------------------------
1   00001    1100    sum_123          20191108 

是否可以使用创建视图/程序保存和remark1100 ?非常感谢您的任何建议。valsum_123value/result

标签: sqloraclestored-proceduresprocedurecreate-view

解决方案


这是你想要的吗?

select t.code, 
       sum(case when t.remark IN ('111', '222', '333') then t.value else 0 end) as val,
       'sum_123' as remark,
       date
from table_name_a t
where t.code = '00001' and t.date = '20191108'
group by t.code, date;

推荐阅读