質問: 表b.商品id とやると恐らくこんなような表ができると思います。 商品id 数量 価格 商品名 ------ ---- ---- ------ 0001 10 1000 万年筆 0002 50 200 ボールペン 0003 25 600 シャーペン 0004 150 2000 文房具セット 0005 20 420 ノート ここで、表の行数を6で割ったときの余りの数を表に追加して全体の行数を6の倍数にしたいと思っています。 (id 0006として空行を追加) しかし、この表の行数を取得するためにcount関数を使うと思うのですが、使い方が分かりません。 count関数を使うにはgroup by句とhaving句を扱うらしいのですがselect句にある列名全部をgroup by句に入れないといけないらしく思ったとおりのことが出来ません。 上記のsqlとcount関数を1つのsqlで表の作成と行の行数を得たいと思っています。(ここでは、5行なので5という値を取得したい。) また、最後にどうやって空行を追加すれば良いかも分かりません。 具体的なsqlのソースなど、どなたか分かりましたら、教えてください。
回答: 行数が6の倍数でなかったら、最大の商品idの続きでダミー行を補う、というクエリのサンプルは以下のようになります。 何もないところから行は生み出せないので、5行の空行を生成し、余りに応じて使います。 必要な情報は入っていると思いますので、中身をみてください。 select a.商品id,a.数量,a.価格,b.商品名 from 表a a,表b b where a.商品id=b.商品id union all select right('0000'+convert(varchar,(convert(int,c.maxid)+t.seq)),4) 商品id, 数量,価格,商品名 from (select 1 seq,null 数量,null 価格,null 商品名 union all select 2, null,null,null union all select 3, null,null,null union all select 4, null,null,null union all select 5, null,null,null) t, (select count(*)%6 pagerow, isnull(max(a.商品id),'0000') maxid from 表a a,表b b where a.商品id=b.商品id) c where t.seq<=(6-pagerow) and c.pagerow<>0