none
グルーピングをうまく作成したい。 RRS feed

  • 質問

  • ご教授願います。

    ストアドで以下のレコードを抽出するクエリを
    作成しました。

    分類1    分類2
    A        a
    A        b
    A        c
    A        d
    A        e
    B        f
    B  g

    しかしながらユーザーから
    現在ページ数/総ページ数を出力したいとの
    ご要望があり例のクエリにRownumber関数を使用して
    試しているのですが中々うまくいきません。

    ページの抽出としては
    以下のような結果を指定していきたいのです。

    分類1    分類2   現在ページ数 総ページ数
    A        a    1ページ     2ページ
    A        b    1ページ     2ページ
    A        c    1ページ     2ページ
    A        d    2ページ     2ページ
    A        e    2ページ     2ページ
    B        f    1ページ     1ページ
    B  g    1ページ     1ページ

    詳細は、分類1別に出力していき
    分類2は3行単位で1ページとなります。
    よって、同一分類1で4行となったら2ページ目になります。
    そしてさらに、さらに総ページを分類1別の最初の行で
    結果がわからないと、1/2のような印字ができません。

    お手数ですがご回答いただければ幸いです。

    尚、クエリは

    select 分類1,分類2 from ・・・
    としています。(分類2の次にrownumber関数を追加しましたが
    中々期待値ができません。)

    以上

    2012年2月2日 23:15

回答

  • 以下のような感じでしょうか?

    select 分類1, 分類2,
           ceiling(row_number() over(partition by 分類1 order by 分類2) / 3.0) as ページ,
           ceiling(count(*) over (partition by 分類1) / 3.0) as 総ページ
           from 分類テーブル
           order by 分類1, 分類2


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 編集済み trapemiya 2012年2月3日 1:42 少し修正。修正するとコードに色が付かなくなる・・・
    • 回答としてマーク zeak01 2012年2月6日 2:08
    2012年2月3日 1:30

すべての返信

  • 以下のような感じでしょうか?

    select 分類1, 分類2,
           ceiling(row_number() over(partition by 分類1 order by 分類2) / 3.0) as ページ,
           ceiling(count(*) over (partition by 分類1) / 3.0) as 総ページ
           from 分類テーブル
           order by 分類1, 分類2


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 編集済み trapemiya 2012年2月3日 1:42 少し修正。修正するとコードに色が付かなくなる・・・
    • 回答としてマーク zeak01 2012年2月6日 2:08
    2012年2月3日 1:30
  •  ご回答ありがとうございました。

    とても助かりました。

    お礼申し上げます。

    以上

     

    2012年2月6日 2:07