このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1274791771/846
#  ・DBMS名とバージョン 
#   Microsoft Access2000 
#   
#  ・テーブルデータ 
#  【ITEM_COUNT】 
#  item_id | year | month | count  
#  --------------------------- 
#  00001  | 2010 |   1 |  150 
#  00001  | 2010 |   1 |  400 
#  00001  | 2010 |   2 |   20 
#               (中略) 
#  00001  | 2010 |  11 |  120 
#  00001  | 2010 |  11 |   50 
#  00001  | 2010 |  11 |  200 
#  00001  | 2010 |  12 |   30 
#  00001  | 2011 |   1 |  500 
#  00001  | 2011 |   1 |  100 
#  00002  | 2010 |   1 |   10 
#  00002  | 2010 |   2 |   30 
#  00002  | 2010 |   2 |  100 
#               (後略) 
#  ※同じid, year, monthのデータが複数存在します。 
#   
#   
#  ・欲しい結果 
#  item_id |  1月 |  2月 |  …  | 11月 | 12月 | 13月  
#  -------------------------------------------- 
#  00001  | 550 |  20 |  …  | 370 |  30 | 610  
#  00002  |  10 | 130 |  …  | (後略) 
#   
#  ※2010/1〜2011/1の13ヶ月間を1月〜13月として(2011/1を13月として)それぞれ集計を求めたい 
#   
#   
#  ・説明 
#  現状は、 
#  ------------------------------------ 
#  SELECT 
#   year, item_id 
#  FROM  
#   ITEM_COUNT 
#  WHERE 
#   year=2010 
#  GROUP BY  
#   item_id, year 
#  PIVOT  
#   Format(month,"#0月") In ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); 
#  ------------------------------------ 
#  上のクエリを「集計1」、WHERE句を"year=2011"に変更したものを「集計2」とし、 
#  次のクエリで結果を求めています。 
#  ------------------------------------ 
#  SELECT  
#   集計1.item_id, 集計1.[1月], 集計1.[2月], … , 集計1.[12月],集計2.[1月] AS 13月 
#  FROM 
#   集計1 LEFT JOIN 集計2 ON 集計1.[item_id] = 集計2.[item_id] 
#  ------------------------------------ 
#   
#  しかしこれだと2011/1にのみデータがあるitem_idが集計から外れてしまいます。 
#  これを回避するにはどのように直したら良いでしょうか。 
# 
# 

年度を俣いで月合計を表示する :-
        findsetof([_item_id],(
                    'ITEM_COUNT'(_item_id,_year,_month,_count)),
                L1),
        findall([_item_id,_合計回数ならび],(
                    append(_,[_item_id|_],L1),
                    '2010年集計'(_2010年counts),
                    '2011年集計'(_2011年counts),
                    append(_2010年counts,_2011年counts,_合計回数ならび)),

                _集計ならび),
        見出し表示,
        append(_,[[_itemp_id,_合計回数ならび]|R],_集計ならび),
        write_formatted(' %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d\n',_合計回数ならび),
        R = [].

見出し表示 :-
        append(_,[_月|R],['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']),
        write_formatted(' %3s |',[_月]),
        R = [],
        write(' 13月\n'),!.

'2010年集計'(_item_id,2010,_month,_合計回数) :-
        for(1,_month,12),
        findsum(_count,'ITEM_COUNT'(_item_id,2000,_month,_count),_合計回数).
'2011年集計'(_item_id,2011,_month,_合計回数) :-
        findsum(_count,'ITEM_COUNT'(_item_id,2011,1,_count),_合計回数).