繁体   English   中英

SQL创建新行作为多行的总和

[英]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_1variable_2的行中的所有DATAOBS ,并将其放置在仍分别位于其各自YYYYMMXXXXYY内的新行variable_12中

如果有必要知道的话,我要处理的实际数据中有数百种不同的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM