[英]SQL Create new row as a sum of multiple rows
假设我有以下几行:
VARIABLENAME YYYYMM XXXXYY DATAOBS
variable_1 | 201101 | 111100 | 20
variable_2 | 201101 | 111100 | 20
variable_1 | 201102 | 111100 | 30
variable_2 | 201102 | 111100 | 30
variable_1 | 201101 | 222211 | 20
variable_2 | 201101 | 222211 | 20
variable_1 | 201102 | 222211 | 30
variable_2 | 201102 | 222211 | 30
我想知道如何获得结果:
VARIABLENAME YYYYMM XXXXYY DATAOBS
variables_1and2 | 201101 | 111100 | 40
variables_1and2 | 201102 | 111100 | 60
variables_1and2 | 201101 | 222211 | 40
variables_1and2 | 201102 | 222211 | 60
其中添加了每个XXXXYY内每个YYYYMM内包含variable_1和variable_2的行中的所有DATAOBS ,并将其放置在仍分别位于其各自YYYYMM和XXXXYY内的新行variable_1和2中 。
如果有必要知道的话,我要处理的实际数据中有数百种不同的YYYYMM和XXXXYY。
提前致谢!
听起来你只是想要
SELECT 'variables_1and2' variablename,
yyyymm,
xxxxyy,
sum(dataobs) dataobs
FROM your_table
WHERE variablename in ('variable_1', 'variable_2' )
GROUP BY yyyymm, xxxxyy
如果打算将这些行重新插入表中,则需要INSERT
INSERT INTO your_table( variablename, yyyymm, xxxxyy, dataobs )
SELECT 'variables_1and2' variablename,
yyyymm,
xxxxyy,
sum(dataobs) dataobs
FROM your_table
WHERE variablename in ('variable_1', 'variable_2' )
GROUP BY yyyymm, xxxxyy
当然,将详细数据和汇总数据存储在同一张表中是很不寻常的。 那通常是一个糟糕的设计。
您正在使用哪个版本的Oracle? 您可以做(10g):
select wm_concat(variablename),yyyymm,xxxxyy, sum(dataobs) dataobs
from table
group by yyyymm,xxxxyy
如果您具有11g第2版,则可以使用list_agg(variablename,',')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.