[前][次][番号順一覧][スレッド一覧]

mysql:471

From: (遠藤 俊裕) <<endo@xxxxxxxxxx>>
Date: Fri, 25 Dec 1998 18:31:40 +0900
Subject: [mysql 471] Re: クロス集計の方法


遠藤です。

>>やっぱり、それ専用のコマンドって無いんですね。
>># なんか、Oracle はあるそうで。
>
>うっそー、Oracleって私のメシのタネですけれど、DBエンジンではそんなコマンド
>知らない。PL/SQLかSQLにそんなのあるってことですか? 教えて教えて教えて教えて

受け売りなんで、私に質問しないでね。^^;

--------- 以下、抜粋。(出典:Nifty FDELPHI)--------

>2.いわゆるクロス集計を一発でやることは出来ないでしょうか?

ターゲットDBがOracle以外の場合には使えませんが、
Oracle7をお使いであるなら、decode関数を使って可能です。
ただし、列の並びは決め打ちになりますが。

こういう売上テーブルがあったとします。

地区コード    売上金額

         1        1000
         1        2000
         2       15000
         3        3000
         3        5000
         4       30000
(以下続く)

で、これを地区コードが1のもの、2のもの、それ以外で、
集計します。

select 
       sum(decode(地区コード,1,売上金額,0)),
       sum(decode(地区コード,2,売上金額,0)),
       sum(decode(地区コード,1,0,2,0,売上金額))
from 売上テーブル

但しこれの難点は、その他の集計を書く時に、
その他以外の項目を全て列挙して0を戻すように書かなければいけない事です。

月別などのように、完全に区分けが固定化出来るのであれば便利です。

尚、「プログラマのためのSQL」という本に、クロス集計の作り方が
書いてあります。
もし宜しければ読んでみてください。

もし、この手のものが多いようであれば、ビューにしてしまうのも手ですね。
私はExcelのピボットテーブルに任せるようにしてますが(^^;

[前][次][番号順一覧][スレッド一覧]

       470 1998-12-25 18:08 [Satoshi Koiwa <koiwa] Re: クロス集計の方法                    
->     471 1998-12-25 18:31 ┗[<endo@xxxxxxxxxx>   ]                                       
       475 1998-12-26 14:08  ┗[Tamon Nomura <tamon@]                                     
       476 1998-12-26 17:35   ┗[<endo@xxxxxxxxxx>   ]