このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/602
#  SQL Server2008 以下のテーブル「値段」から 
#   
#  id  | 食品 | 値段合計 | 値段1 | 値段2 | 値段3 
#  ________________________ 
#   
#  1 | 肉 |  500  |  500   | 
#  1 | 魚 |  300  |     | 300 
#  1 | 卵 |  200    |    100   |  50      |   50 
#  2  |  肉 |  350    |    250   |  100 
#  2  |  魚 |  400    |    150   |  250 
#   
#   
#  以下の結果を得て、新しくテーブル「値段合計」を作りたいです。 
#   
#   
#  id |値段id合計|肉値段合計|肉値段1|肉値段2|肉値段3|魚値段合計|魚値段1|魚値段2|魚値段3|卵値段合計|卵値段1|卵値段2|卵値段3| 
#  _________________________________________________________________________________________________________________________________ 
#  1   |   1000  |   500   |  500   |         |        |   300    |        |  300  |          | 200     | 100    |   50   |   50 | 
#  2   |   750   |   350   |  250   |  100    |        |   400    |   150  |  250 
#    
#   
#  肉、魚、卵はそれぞれのidに一行しかなく、 
#  肉と魚は必ずありますが、卵はあるとは限りません。 
#  シンプル縦横問題はわかったのですが、複雑になると一挙にわからなくなりました。。 
#  ご教示お願い致します。 
# 

'「値段合計」を作る' :-
        findsetof(id,値段(_id,_,_,_,_,_),_idならび),
        append(_,[_id|R],_idならび),
        食品の値段を得る(_id,肉,_肉値段合計,_肉値段1,_肉値段2,_肉値段3),
        食品の値段を得る(_id,魚,_魚値段合計,_魚値段1,_魚値段2,_魚値段3),
        食品の値段を得る(_id,卵,_卵値段合計,_卵値段1,_卵値段2,_卵値段3),
        _値段id合計 is _肉値段合計 + _魚値段合計 + _卵値段合計,
        assertz(値段合計(_id,_値段id合計,_肉値段合計,_肉値段1,_肉値段2,_肉値段3,_魚値段合計,_魚値段1,_魚値段2,_魚値段3,_卵値段合計,_卵値段1,_卵値段2,_卵値段3)),
        R = [].

食品の値段を得る(_id,_食品,_値段合計,_値段1,_値段2,_値段3) :-
         値段(_id,_食品,_値段合計,_値段1,_値段2,_値段3),!.
食品の値段を得る(_id,_食品,0,0,0,0).