(現在 過去ログ26 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■3957 / inTopicNo.1)  選択方法について
  
□投稿者/ 桐の初心者 -(2008/11/07(Fri) 10:43:00)
    初めまして。お願いいたします。
    例えば、Aさん(項目名=氏名):50(項目名=個数) Bさん:70 Cさん:30 Dさん:70、、、と何百人かいます。
    そこで、「2人合計で120かそれの近似値」を関数を使って選択する方法がありますでしょうか。

引用返信 [メール受信/OFF] 削除キー/
■3958 / inTopicNo.2)  Re[1]: 選択方法について
□投稿者/ 通りすがり -(2008/11/07(Fri) 12:44:31)
    結合表作って、合計して、

    桐ヘルプより
    結合条件を指定しないと、一方の表の1件のレコードにもう一方の表の全レコードがつなげられます。
    これを強制結合といいます。たとえば「Siten.tbl」をふたつ使用して結合を行なったとき、結合条件を指定していなければ、「Siten.tbl の登録件数」×「Siten.tbl の登録件数」のレコードが作成されます。

引用返信 [メール受信/OFF] 削除キー/
■3959 / inTopicNo.3)  Re[2]: 選択方法について
□投稿者/ うにん -(2008/11/07(Fri) 16:43:41)

    > 結合条件を指定しないと、一方の表の1件のレコードにもう一方の表の全レコードがつなげられます。


    [氏名1]の絞り込み条件に<>[氏名2]を入れるとか、
    #絶対値([金額合計]-120)
    という計算フィールド作っておくと、それでソートすると近い順に並ぶとか。


引用返信 [メール受信/OFF] 削除キー/
■4005 / inTopicNo.4)  Re[3]: 選択方法について
□投稿者/ 三四郎 -(2008/11/18(Tue) 14:22:25)
    うにんさんが説明されてますが、詳しく説明しますと、

    計算項目で

    [120との差]

    という数値形式の項目を作り、

    項目計算式に、

     [個数]-120

    と入れておけば、

    個数が110の場合= -10
    個数が120の場合= 0
    個数が130の場合= 20

    という数値が[120との差]に求められます。
    これを、[120との差]の昇順に並べ替えれた場合は、つまり、[個数]順と同じ並べ替えになるということになります。

    また、

    項目計算式に、

     #絶対値([個数]-120)

    と入れておけば、

    個数が110の場合= 10
    個数が120の場合= 0
    個数が130の場合= 20

    という数値が求められます。
    これを、[120との差]の昇順に並べ替えれた場合、120に近い順に並べ変えることができます。

    いかがでしょうか?

    >そこで、「2人合計で120かそれの近似値」を関数を使って選択する方法がありますでしょうか。
    この、「2人合計で・・・」というところがよくわからないのですが、
    もう少し詳しく質問いただければ、さらに詳しいアドバイスが可能かもしれません。




    No3959に返信(うにんさんの記事)
    >
    >>結合条件を指定しないと、一方の表の1件のレコードにもう一方の表の全レコードがつなげられます。
    >
    >
    > [氏名1]の絞り込み条件に<>[氏名2]を入れるとか、
    > #絶対値([金額合計]-120)
    > という計算フィールド作っておくと、それでソートすると近い順に並ぶとか。
    >
    >
引用返信 [メール受信/OFF] 削除キー/
■4009 / inTopicNo.5)  Re[1]: 選択方法について
□投稿者/ Kanasy.Ge -(2008/11/18(Tue) 20:57:24)
    No3957に返信(桐の初心者さんの記事)

    「関数を使って選択する方法」はないと思います。(^^;)
    「2人合計で120かそれの近似値」の意味するところは微妙ですが、私なりに解釈した結果でもって一括処理をくんでみました。総当たり方式です。力わざと云うか。(^^;)


120.LZH
/4KB
引用返信 [メール受信/OFF] 削除キー/
■4011 / inTopicNo.6)  Re[1]: 選択方法について
□投稿者/ eo -(2008/11/19(Wed) 00:17:05)
    「2人合計で120かそれの近似値」は無視して、総当り方式でデータを組み合わせました。あとは桐の並べ替えや絞り込みでなんとかなるのでは?
    Kanasy.Geさんの素晴らしい処理方法のあとでなんなんですが....


main.zip
/6KB
引用返信 [メール受信/OFF] 削除キー/
■4012 / inTopicNo.7)  じゃ、俺も書いてみる
□投稿者/ 通りすがり -(2008/11/19(Wed) 09:00:10)
    2008/11/19(Wed) 09:01:15 編集(投稿者)

    *氏名別個数表.tbl
    [氏名],[個数]
    Aさん,50
    Bさん,70
    Cさん,30
    Dさん,70
    ------------
    *氏名別個数表の自己結合表.viw
    結合表定義で対象表に、氏名別個数表.tbl を2回追加
     氏名別個数表.tbl
     氏名別個数表.tbl:<1>
    1、所属対象表="氏名別個数表.tbl",絞り込み条件1="["氏名別個数表.tbl".氏名]<>["氏名別個数表.tbl:<1>".氏名]
    2、所属対象表="氏名別個数表.tbl:<1>"
    3、表示項目名="2人の合計",項目/計算式="["氏名別個数表.tbl".個数]+["氏名別個数表.tbl:<1>".個数]"
    4、表示項目名="合計120からの偏移",項目/計算式="#絶対値([2人の合計]-120)",並べ替え="昇順"

    桐が自動的に作ったSQL文=
    SELECT 1.* ,2.* ,1.[個数]+2.[個数] AS [2人の合計],#絶対値([2人の合計]-120) AS [合計120からの偏移] FROM "氏名別個数表.tbl" AS 1 , "氏名別個数表.tbl" AS 2 WHERE (1.[氏名]<>2.[氏名]) ORDER BY [合計120からの偏移] COLLATE CODE ASC /* +UNDEFZERO */
引用返信 [メール受信/OFF] 削除キー/
■4013 / inTopicNo.8)  Re[2]: じゃ、俺も書いてみる
□投稿者/ うにん -(2008/11/19(Wed) 09:49:19)
    > 1、所属対象表="氏名別個数表.tbl",絞り込み条件1="["氏名別個数表.tbl".氏名]<>["氏名別個数表.tbl:<1>".氏名]

    私の前のコメント、2人の合計だから等しいのを除外、と思って<>と書いたけど
    これだと「AさんとBさん」「BさんとAさん」が両方でてきますよね。
    <か>の方がよい。

    > 桐が自動的に作ったSQL文=

    ほほお。こんなのあったんですかあ。

引用返信 [メール受信/OFF] 削除キー/
■4015 / inTopicNo.9)  Re[3]: じゃ、俺も書いてみる
□投稿者/ 通りすがり -(2008/11/19(Wed) 10:56:54)
    ああ、そうそう、絞り込み条件1とかは確認せずに No.3959をコピペした
    ゴメンネ
引用返信 [メール受信/OFF] 削除キー/
■4016 / inTopicNo.10)  Re[2]: 選択方法について
□投稿者/ 桐の初心者 -(2008/11/19(Wed) 16:47:44)
    No4009に返信(Kanasy.Geさんの記事)
    > ■No3957に返信(桐の初心者さんの記事)
    >
    > 「関数を使って選択する方法」はないと思います。(^^;)
    > 「2人合計で120かそれの近似値」の意味するところは微妙ですが、私なりに解釈した結果でもって一括処理をくんでみました。総当たり方式です。力わざと云うか。(^^;)
    >
    本当にありがとうございます。
    Kanasy.Ge様、出来れば「5人合計で120かそれの近似値」を希望するとどのような定義になるのですか。お教えください。度々お手数をお掛けします。
引用返信 [メール受信/OFF] 削除キー/
■4017 / inTopicNo.11)  Re[2]: 選択方法について
□投稿者/ Kanasy.Ge -(2008/11/20(Thu) 01:53:21)
    No4011に返信(eoさんの記事)
    そうか!
    次に処理する行番号を、基点としたそれよりも後ろになるようにすればいいんですね。
    そうすれば、逆の組合わせを検索する手間(これが一番の律速段階だったから)が省けて速くなりますね。
    しいて書き換えれば
    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
    ・・・・(前略)・・・・
    繰り返し( .not #EOF)
     &符番a=[符番],&個数a=#nvl([個数],0)
    * ジャンプ 行番号=1
     繰り返し( .not #EOF)
      &行b=#行番号
      &符番b=[符番]
      &符番c=&符番a+" と "+[符番]
      &符番d=[符番]+" と "+&符番a
      &個数b=#nvl([個数],0)
      &個数計=&個数a+&個数b
      if(&行a<>&行b .and 118=<&個数計 .and &個数計=<122) /*「120かそれの近似値」を118〜122と仮定*/
       編集表 2
    *   検索 [組合せ]{&符番d},終了状態=&実行リターン /*逆の組合わせを排除*/
    *   条件(&実行リターン<>1) 行追加 [組合せ]=&符番c,[合計]=&個数計,[内訳]=#str(&個数a)+"+"+#str(&個数b)
       行追加 [組合せ]=&符番c,[合計]=&個数計,[内訳]=#str(&個数a)+"+"+#str(&個数b)
       編集表 1
      end
    ・・・・(後略)・・・・
    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
    のように*を付けてやってみたらグッと速くなりました。(^^)v

引用返信 [メール受信/OFF] 削除キー/
■4018 / inTopicNo.12)  Re[3]: 選択方法について
□投稿者/ Kanasy.Ge -(2008/11/20(Thu) 02:02:27)
    No4016に返信(桐の初心者さんの記事)

    >出来れば「5人合計で120かそれの近似値」を希望すると
    >どのような定義になるのですか。

    「5人合計」とはかなり厳しいですが、成り行き上考えてみました。

    eoさんが使った「印字」方式が便利だし速いので、借用させてもらいました。
    あと組合わせの重複回避方法も。



121.LZH
/7KB
引用返信 [メール受信/OFF] 削除キー/
■4019 / inTopicNo.13)  Re[4]: 選択方法について
□投稿者/ うにん -(2008/11/20(Thu) 12:48:52)
    > >出来れば「5人合計で120かそれの近似値」を希望すると
    > >どのような定義になるのですか。
    >
    > 「5人合計」とはかなり厳しいですが、成り行き上考えてみました。

    100人から2人なら100x99=9900通り(の半分)。5人だとx98x97x96で約100万倍(の120分の一かな。)

    一括処理で近似値に上限を設ければ途中でかなり削れるでしょうけど、結合では苦しいかな。

引用返信 [メール受信/OFF] 削除キー/
■4020 / inTopicNo.14)  Re[5]: 選択方法について
□投稿者/ 桐の初心者 -(2008/11/20(Thu) 13:51:17)
    No4019に返信(うにんさんの記事)
    >>>出来れば「5人合計で120かそれの近似値」を希望すると
    >>>どのような定義になるのですか。
    >>
    >>「5人合計」とはかなり厳しいですが、成り行き上考えてみました。
    >
    > 100人から2人なら100x99=9900通り(の半分)。5人だとx98x97x96で約100万倍(の120分の一かな。)
    >
    > 一括処理で近似値に上限を設ければ途中でかなり削れるでしょうけど、結合では苦しいかな。
    >
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■4022 / inTopicNo.15)  Re[5]: 選択方法について
□投稿者/ 通りすがり -(2008/11/20(Thu) 20:01:14)
    No4019に返信(うにんさんの記事)
    > 100人から2人なら100x99=9900通り(の半分)。5人だとx98x97x96で約100万倍(の120分の一かな。)
    > 一括処理で近似値に上限を設ければ途中でかなり削れるでしょうけど、結合では苦しいかな。

    うん、一括処理だと途中迄でも結果を得られるからね、終わらない以上…
    結果レコード数やファイル容量が桐仕様内に治まる場合でも、遅いPCだと1年くらい掛かるのか?
    結合使うと一括処理よりかなり速くなるけど、その代わり途中で止めれない…

    時間あって色々と試してみた

    *5表の自己結合一気書きだと遅いので、自己結合4個ネスト
    (合計値計算が3回オーバーラップする筈だが、桐にはオプティマイザ機能がない為か? 抽出条件の">"の先処理で?逆に早くなる)
    Kanasy.Ge さんの30レコードの場合、結合の方が腹時計で4倍くらい早かった。100レコードだとより早いか?終わらないので解らない

    *計算項目に抽出条件入れる前に仕様を超える結合でも、抽出条件で最終結果仕様内なら結果でた、まあ正しいんだけど
    6500レコードの表を自己強制結合すると、桐がオエッって変なもの吐いた、途中までの結果は得られない
    しかし、2表からの計算項目の抽出条件に #MOD( [計算項目1] ,100 )=0 入れたら正常に結合完了して結果でた
引用返信 [メール受信/OFF] 削除キー/
■4023 / inTopicNo.16)  Re[6]: 選択方法について
□投稿者/ うにん -(2008/11/20(Thu) 23:03:10)
    > 6500レコードの表を自己強制結合すると、桐がオエッって変なもの吐いた、途中までの結果は得られない
    > しかし、2表からの計算項目の抽出条件に #MOD( [計算項目1] ,100 )=0 入れたら正常に結合完了して結果でた

    これは行数が100分の一ぐらいになるように適当に抽出ってことですか?

    最初の質問の例が、2人という捏造した条件だったので個数も最低30個になってますよね。
    個数がそのままだと5人合計したら最低150個になって全然120に近くなりようがないんだけど
    個数の最小が10個で合計の範囲を110〜130、みたいに明確であれば、1人目は最大で
    130-10x4で90、
    1人目に60を選んだら2人目は130-60-30で40以下、とか。。。
引用返信 [メール受信/OFF] 削除キー/
■4024 / inTopicNo.17)  Re[7]: 選択方法について
□投稿者/ 通りすがり -(2008/11/21(Fri) 00:08:46)
    解りにくくてゴメン、その2行は、それ以前と別の話しで、余り意味ないかも

    一括処理だと非該当レコードを都度除外して行けるけど、
    結合で(例えば5人合計が30前後に抽出条件設定する)と最終出力結果が桐仕様内ならば動作する? 同様に非該当レコードを都度除外して行ってる? 事を確認する為に、
    テストデータで行った(該当データでレコード数調整して行えばより良いんだけど、時間掛るの嫌で、はしょって時間掛りにくいデータ使った)
    WHERE (#MOD( [計算項目1] ,100 )=0) 入れる前は桐仕様超えてエラー出た

    6500.tbl (6,500レコード)
    [連番],[ダミー]

    SQL文=
    SELECT 1.[連番] AS [連番],2.[連番] AS [連番1],1.[連番]+2.[連番] AS [計算項目1] FROM "6500.tbl" AS 1 , "6500.tbl" AS 2 WHERE (#MOD( [計算項目1] ,100 )=0) /* +UNDEFZERO */
引用返信 [メール受信/OFF] 削除キー/
■4026 / inTopicNo.18)  殆ど余興
□投稿者/ Kanasy.Ge -(2008/11/23(Sun) 00:12:26)
    あまりに時間がかかるので、進捗状況を%表示させてみました。(^^;)

    娘から順列・組合わせの出し方を教えてもらいました・・・。
    うちの娘は文系の学生なのに、なんでこんなこと覚えてたんだろう(?_?)。

1227366746.lzh
/9KB
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -