-1

我有一些来自总帐的数据,位于一个名为“ GL Table”-和的表Country中。我正在尝试根据帐户字段中的某些帐户对金额字段进行求和,然后将 SUM 作为每个国家/地区的“修订收入”插入到相同字段 ( ) 中同一表格的底部。我一直遇到障碍,我想知道我是否应该为此创建另一个表而不是将其保存在同一个表中。 AccountAmountCountry, 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);
4

2 回答 2

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 
于 2013-10-22T17:21:21.433 回答
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 规范化这将是一个坏主意。如果您可以计算它,最好只运行一个查询,如果查询太长而无法运行,那么只要用户知道它是一个快照,运行查询并填充一个单独的表可能是合适的及时而不是实时数据。

于 2013-10-22T17:16:19.777 回答