このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1274791771/967
# 
#  ■DBMS名とバージョン
#  Firebird 1.03
#  ■テーブルデータ (注文データベースのようなものです)
#  ・Main 主情報テーブルMIDがキー
#  MID HACCHUBI
#  1 2011/03/01
#  ・DETAIL 明細テーブルDIDがキー MID,IIDが参照キー
#  DID MID IID KOSU
#  1  1  1  100
#  2  1  2  30
#  ・ITEM 商品テーブルIIDがキー
#  IID NAMAE ZAIKO OPOINT BIKO
#  1  HOGE  20  10   0
#  2  HUGA  50  5    1
#  ■欲しい結果
#  2011/1/1から1/31の注文のあった各アイテムの個数(DETAIL.KOSU)の平均値が10以上の場合、
#  該当するアイテムの注文ライン(ITEM.OPOINT)に、その平均値を入れて更新。平均値が10未満の場合、
#  ITEM.OPOINTに0を入れる。ただしアイテムの備考(ITEM.BIKO)が1の場合は、ITEM.OPOINTには
#  空欄(NULL)にする。
#  ■説明
#  といいますか、上記の欲しい結果が全てなのですが、どう書いていいのかちょっと見当がつきません。
#  在庫の仕入れをする個数(ITEM.OPOINT)の設定をコンピュータにさせようとしているのですが・・・。
#  丸投げで申し訳ありませんが、どなたかお願いします。 

'2011/1/1から1/31の注文のあった各アイテムの個数(DETAIL.KOSU)の平均値が10以上の場合、該当するアイテムの注文ライン(ITEM.OPOINT)に、その平均値を入れて更新。平均値が10未満の場合、ITEM.OPOINTに0を入れる。ただしアイテムの備考(ITEM.BIKO)が1の場合は、ITEM.OPOINTには空欄(NULL)にする' :-
        findsetof(_MID,(
                    'Main'(_MID,_HACCHUBI),
                    _HACCHUBI @>= '20110101',
                    _HACCHUBI @=< '20110131'),
                L1),

        findsetof(_IID,(
                    'DETAIL'(_DID,_MID,_IID,_KOSU),
                    append(_,[_MID|_],L1)),
                L2),

        append(_,[IID|R],L2),
        findavg(_KOSU,(
                    'DETAIL'(_DID,_MID,_IID,_KOSU),
                    append(_,[_MID|_],L1)),
                AVG),
        'ITEM更新'(IID,AVG),
        R = [].

'ITEM更新'(IID,AVG) :-
        retract('ITEM'(_IID,_NAMAE,_ZAIKO,_OPOINT,'1')),
        assertz('ITEM'(_IID,_NAMAE,_ZAIKO,'',_BIKO)),!.
'ITEM更新'(IID,AVG) :-
        AVG >= 10,
        write_formatted_atom(S,'%t',[AVG]),
        retract('ITEM'(_IID,_NAMAE,_ZAIKO,_OPOINT,_BIKO)),
        assertz('ITEM'(_IID,_NAMAE,_ZAIKO,S,_BIKO)),!.
'ITEM更新'(IID,AVG) :-
        AVG < 10,
        retract('ITEM'(_IID,_NAMAE,_ZAIKO,_,_BIKO)),
        assertz('ITEM'(_IID,_NAMAE,_ZAIKO,'0',_BIKO)),!.