このディレクトリの索引

# 出典 :: SQL質疑応答スレ 9問目 #751 # # 年月日と金額を持ったテーブルがあります。前年度合計と今年度合計を出したいのですが、 # # 年月日 金額 # 20080402 200 # 20080404 200 # 20090401 100 # 20090401 500 # 20090404 300 # # とあった場合、↓にしたいです # # 年月日 今年度合計 前年度合計 # 20090401 600 0 # 20090402 0 200 # 20090404 300 200 # # 両年度金額が無い場合は表示無しで、年月日は8桁の数値型です。 # うるう年は考慮しなくて構いません。 '年月日と金額を持ったテーブルがあります。前年度合計と今年度合計を出したいのですが、 年月日 金額 20080402 200 20080404 200 20090401 100 20090401 500 20090404 300 とあった場合、↓にしたいです 年月日 今年度合計 前年度合計 20090401 600 0 20090402 0 200 20090404 300 200 両年度金額が無い場合は表示無しで、年月日は8桁の数値型です。 うるう年は考慮しなくて構いません。' :- '年月日と金額を持ったテーブルがあります。今年度の年月日ごとの金額合計とそれぞれの日の前年度同日の金額合計を見出し行の後に表示します。'. '年月日と金額を持ったテーブルがあります。今年度の年月日ごとの金額合計とそれぞれの日の前年度同日の金額合計を見出し行の後に表示します。' :- 初めに重複しない年月日ならびを取り出します(_重複しない年月日ならび), 見出しです, 重複しない年月日ならびから順に年月日を取り出し今年度合計と前年度合計を計算して見出し行の後に表示します(_重複しない年月日ならび). 初めに重複しない年月日ならびを取り出します(_重複しない年月日ならび) :- setof(_年月日,[_年月日,_金額] ^ テーブル(_年月日,_金額),_重複しない年月日ならび). 重複しない年月日ならびから順に年月日を取り出し今年度合計と前年度合計を計算して見出し行の後に表示します(_重複しない年月日ならび) :- 重複しない年月日ならびから重複しない今年の年月日ならびを得る(_重複しない年月日ならび,_重複しない今年度の年月日ならび), 今年の年月日の金額合計と前年同日の金額合計ならび(_重複しない今年度の年月日ならび,_今年の年月日の金額合計と前年同日の金額合計ならび), 見出し行の後に表示します(_今年の年月日の金額合計と前年同日の金額合計ならび). 重複しない年月日ならびから重複しない今年の年月日ならびを得る(_重複しない年月日ならび,_重複しない今年の年月日ならび) :- 今年度を得る(_重複しない年月日ならび,_今年度), findall(_今年度の年月日,( 重複しない年月日から今年度の年月日を取り出し(_重複しない年月日ならび,_今年度の年月日)),_重複しない今年の年月日ならび). 重複しない年月日から今年度の年月日を取り出し(_重複しない年月日ならび,_今年度,_今年度の年月日) :- member(_年月日,_重複しない年月日ならび), _今年度 is _年月日 // 10000. 今年の年月日の金額合計と前年同日の金額合計ならび(_重複しない今年度の年月日ならび,_今年の年月日の金額合計と前年同日の金額合計ならび) :- findall([_今年の年月日,_今年の金額合計,_前年の金額合計],( 今年の年月日の金額合計と前年同日の金額合計を得る(_重複しない今年度の年月日ならび,_今年の年月日,_今年の金額合計,_前年の金額合計)),_今年の年月日の金額合計と前年同日の金額合計ならび). 今年の年月日の金額合計と前年同日の金額合計を得る(_重複しない今年度の年月日ならび,_今年の年月日,_今年の金額合計,_前年の金額合計) :- member(_今年の年月日,_重複しない今年度の年月日ならび), 今年の金額合計(_今年の年月日,_今年の金額合計), 前年同日の金額合計(_今年の年月日,_前年の金額合計). 今年の金額合計(_今年の年月日,_今年の金額合計) :- 金額合計(_今年の年月日,_今年の金額合計). 前年同日の金額合計(_今年の年月日,_前年の金額合計) :- 前年同日の(_今年の年月日,_前年同日), 金額合計(_前年同日,_金額合計). 金額合計(_年月日,_金額合計) :- findsum(_金額,( '年月日・金額'(_年月日,_金額)),_金額合計). 前年同日の(_今年の年月日,_前年同日) :- _前年同日 is _今年の年月日 - 10000. 今年度を得る(_重複しない年月日ならび,_今年度) :- 重複しない年月日ならびに存在する年を取り出しその年の最大値が今年度だ(_重複しない年月日ならび,_今年度). 重複しない年月日ならびに存在する年を取り出しその年の最大値が今年度だ(_重複しない年月日ならび,_今年度) :- 重複しない年月日ならびに存在する年を取り出し(_重複しない年月日ならび,_年ならび), その年の最大値が今年度だ(_年ならび,_今年度). 重複しない年月日ならびに存在する年を取り出し(_重複しない年月日ならび,_年ならび) :- setof(_年,( 重複しない年月日ならびに存在する年(_重複しない年月日ならび,_年)),_年ならび). 重複しない年月日ならびに存在する年(_重複しない年月日ならび,_年) :- member(_年月日,_重複しない年月日ならび), _年 is _年月日 // 10000. その年の最大値が今年度だ(_年ならび,_今年度) :- max_list(_年ならび,_今年度). 見出し行の後に表示します(_今年の年月日の金額合計と前年同日の金額合計ならび) :- 見出し行の後に, 表示します(_今年の年月日の金額合計と前年同日の金額合計ならび). 見出し行の後に :- writef('%w\t%w\t%w\n',[年月日,今年度合計,前年度合計]). 表示します(_今年の年月日の金額合計と前年同日の金額合計ならび) :- forall(member([_年月日,_今年の金額合計,_前年同日の金額合計],_今年の年月日の金額合計と前年同日の金額合計ならび), writef('%w\t%w\t%w\t\n',[_年月日,_今年の金額合計,_前年同日の金額合計])). findsum(_射影項,_目標,_合計) :- findall(_射影項,_目標,_射影項ならび), sum_list(_射影項ならび,_合計).