アプリ版:「スタンプのみでお礼する」機能のリリースについて

表A           表B
商品ID 数量 価格    商品ID 商品名 
------ ---- ----    ------ ------
0001   10 1000    0001  万年筆
0002   50 200     0002  ボールペン
0003   25 600     0003  シャーペン
0004   150 2000    0004  文房具セット
0005   20 420     0005  ノート

SELECT 数量,価格,商品名,商品ID
FROM 表A,表B
WHERE 表A.商品ID = 表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のソースなど、どなたか分かりましたら、教えてください。

A 回答 (1件)

行数が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
    • good
    • 0
この回答へのお礼

返事が遅れてしまい、大変申し訳ございませんでした。
まだ、SQLについて素人同然で、見たことの無い関数が多くなんとか理解することが出来ました。
本当にありがとうございました。

お礼日時:2008/09/08 09:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す