このディレクトリの索引
http://pc11.2ch.net/test/read.cgi/db/1252492296/789
#  [TABLE1] 
#   
#  key1       key2       data 
#  ------------------------------------ 
#  AAA        01         zzz 
#  AAA        02         yyy 
#  BBB        01         xxx 
#  BBB        03         www 
#  CCC        02         vvv 
#  DDD        03         uuu 
#   
#   
#   
#  [TABLE2] 
#  key1       data 
#  ------------------------------------ 
#  MMM        01&02 
#  NNN        01only 
#  OOO        02only 
#   
#   
#  このようなテーブルから、以下のデータを抽出したいです。 
#   
#   
#   
#  key1       key2       data1      data2 
#  --------------------------------------------- 
#  AAA        01         zzz        01&02 
#  BBB        01         xxx        01only 
#  CCC        02         vvv        02only 
#   
#   
#  TABLE1のKEYはkey1とkey2です。 
#  このTABLE1から、各key1に対して一意にデータを抽出します。 
#  抽出はkey2の値が01と02のもののみを対象とし、 
#  01があれば01のデータを、なければ02のデータを引っ張ってきます(data1)。 
#   
#  さらに、各key1におけるkey2の状況?をdata2として付加したいです。 
#  ここではTABLE2に格納されていることにしましたが、 
#  条件文で単に文字列を設定するのでも構いません。 
#   
#  SQLServer2000を使用します。 
#  どのようなSQLを書けばよいでしょうか? 
#  よろしくお願いします。 
# 
# 

'TABLE1から、各key1に対してkey2の値が01と02のもののみを対象とし、01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加してTABLE2に追加して出力' :-
      findsetof(_key1,('TATLE1'(_key1,_key2,_data),key2の対象は01か02のみ(_key2)),L1),
      見出し,
      member(_key1,L1),
      '01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加'(_key1,L2),
      write_formatted('%t %t %t %t\n',L2),
      fail.
'TABLE1から、各key1に対してkey2の値が01と02のもののみを対象とし、01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加してTABLE2に追加して出力'.

key2の対象は01か02のみ('01') :- !.
key2の対象は01か02のみ('02') :- !.

'01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加'(_key1,X) :-
      findall([_key1,_key2,_data],'01があれば01のデータを、なければ02のデータを抽出し'(_key1,_key2,_data),L),
      各key1におけるkey2の状況(L,X),
      X = [_,_,_,TABLE2data],
      assertz('TABLE2'(_key1,TABLE2data)),!.

'01があれば01のデータを、なければ02のデータを抽出し'(_key1,'01',_data) :-
      'TABLE1'(_key1,'01',_data).
'01があれば01のデータを、なければ02のデータを抽出し'(_key1,'02',_data) :-
      'TABLE1'(_key1,'02',_data).

各key1におけるkey2の状況([[_key1,'01',_data]],[_key1,'01',_data,'01only']) :- !.
各key1におけるkey2の状況([[_key1,'02',_data]],[_key1,'02',_data,'02only']) :- !.
各key1におけるkey2の状況([[_key1,'01',_data],[_key1,'02',_]],[_key1,'01',_data,'01&02']) :- !.
各key1におけるkey2の状況([[_key1,'02',_],[_key1,'01',_data]],[_key1,'01',_data,'01&02']) :- !.

見出し :-
      write('key1       key2       data1      data2 \n'-----------------------------------\n').