-1

" " GL Table-Countryと. アカウント フィールドの特定のアカウントに基づいて金額フィールドを合計し、同じフィールドの同じテーブルの下部にある国ごとに「修正された収入」として合計を挿入しようとしています ( )。私は障害に遭遇し続けており、同じテーブルに保持するのではなく、このために別のテーブルを作成する必要があるかどうか疑問に思っています. 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

それを同じテーブルに戻すかどうかについては、データベースの正規化については悪い考えだと思います。計算できる場合は、クエリを実行するだけの方が良いでしょう。クエリが長すぎて実行できない場合は、ユーザーがスナップショットであることを知っている限り、クエリを実行して別のテーブルにデータを入力することが適切な場合があります。リアルタイムのデータではなく時間内に。

于 2013-10-22T17:16:19.777 に答える