在单个表中插入总计

时间:2013-10-22 17:04:33

标签: sql

我在名为“GL Table” - CountryAccountAmount的表格中有来自总帐的一些数据。我正在尝试根据帐户字段中的某些帐户汇总金额字段,然后将SUM作为“修订收入”插入同一字段(Country, Account, Amount)中同一表格底部的每个国家/地区。我一直遇到障碍,我想知道我是否应该为此创建另一个表而不是将它保存在同一个表中。

这是我提出的但是它没有用。

SELECT  COUNTRY, 
        AMOUNT 
FROM    GL_TABLE
WHERE   AMOUNT =  (
          SELECT SUM(AMOUNT) FROM GL_TABLE
          WHERE  ACCOUNT IN 'PTBI' OR 
                 ACCOUNT IN 'MLS_ENT' OR 
                 ACCOUNT IN 'VAL_ALLOW' OR 
                 ACCOUNT IN 'RSC_DEV'
          GROUP BY COUNTRY);

2 个答案:

答案 0 :(得分:1)

你的问题真的不清楚......

http://sqlfiddle.com/#!2/d0bc3/1/0

create table GL_Table (
   Country  varchar(20), 
   Account  varchar(20), 
   Amount   float
);

insert into GL_Table values ('USA','PTBI',100); 
insert into GL_Table values ('USA','PTBI',100); 
insert into GL_Table values ('USA','PTBI',100); 

insert into GL_Table values ('USA','MLS_ENT',101);  

insert into GL_Table values ('USA','RSC_DEV',102);   
insert into GL_Table values ('USA','RSC_DEV',102);  

insert into GL_Table values ('USA','NOTHING',777);   
insert into GL_Table values ('USA','NOTHING',777);  

所以数据现在是:

COUNTRY      ACCOUNT          AMOUNT
USA          PTBI             100
USA          PTBI             100
USA          PTBI             100
USA          MLS_ENT          101
USA          RSC_DEV          102
USA          RSC_DEV          102
USA          NOTHING          777
USA          NOTHING          777 

然后,仅添加SUM行的查询就像是:

INSERT INTO GL_TABLE 

      SELECT  COUNTRY, 
              concat('SUM OF ', ACCOUNT) as NEW_ACCT_NAME, 
              SUM(AMOUNT) as SUM_ACCOUNT

      FROM    GL_TABLE

      WHERE   ACCOUNT IN ('PTBI', 'MLS_ENT','VAL_ALLOW','RSC_DEV')

      GROUP   BY COUNTRY, ACCOUNT;

现在数据将是(select * from gl_table):

COUNTRY      ACCOUNT          AMOUNT
USA          PTBI             100
USA          PTBI             100
USA          PTBI             100
USA          MLS_ENT          101
USA          RSC_DEV          102
USA          RSC_DEV          102
USA          NOTHING          777
USA          NOTHING          777
USA          SUM OF MLS_ENT   101
USA          SUM OF PTBI      300
USA          SUM OF RSC_DEV   204 

再次查看了您的查询,看起来您想要一个国家/地区总和?不知道......(不会有太大变化)

INSERT INTO GL_TABLE 

      SELECT  COUNTRY, 
              concat('SUM FOR ', COUNTRY) as NEW_ACCT_NAME, 
              SUM(AMOUNT) as SUM_ACCOUNT

      FROM    GL_TABLE

      WHERE   ACCOUNT IN ('PTBI', 'MLS_ENT','VAL_ALLOW','RSC_DEV')

      GROUP   BY COUNTRY;

所以数据最终会......

COUNTRY      ACCOUNT          AMOUNT
USA          PTBI             100
USA          PTBI             100
USA          PTBI             100
USA          MLS_ENT          101
USA          RSC_DEV          102
USA          RSC_DEV          102
USA          NOTHING          777
USA          NOTHING          777
USA          SUM FOR USA      605 

答案 1 :(得分:0)

我想你想

SELECT SUM(AMOUNT), COUNTRY FROM GL_TABLE WHERE ACCOUNT IN 'PTBI' OR ACCOUNT IN 'MLS_ENT' OR ACCOUNT IN 'VAL_ALLOW' OR ACCOUNT IN 'RSC_DEV' GROUP BY COUNTRY

如果您想查找某个国家/地区的所有帐户的总和,或者您希望按国家/地区按帐户细分

SELECT SUM(AMOUNT), COUNTRY, ACCOUNT FROM GL_TABLE WHERE ACCOUNT IN 'PTBI' OR ACCOUNT IN 'MLS_ENT' OR ACCOUNT IN 'VAL_ALLOW' OR ACCOUNT IN 'RSC_DEV' GROUP BY COUNTRY, ACCOUNT

至于是否将它插回到同一个表中我会说db标准化会是一个坏主意。如果你可以计算它,最好只运行一个查询,如果查询太长而无法运行,那么只要用户知道它是一个快照,就可以运行查询并填充一个单独的表。及时而不是实时数据。