以下のようなカテゴリと商品の関係のテーブル(T_SHOUHIN_CATEGORY)と

カテゴリマスタテーブル(T_CATEGORY)があります。

CREATE TABLE T_SHOUHIN_CATEGORY(SHOUHIN_CD VARCHAR(13) NOT NULL,CATEGORY_CD CHAR(16));
▼データ
11111,C001001001001000
22222,C001001001002000
33333,C001001001001001

CREATE TABLE T_CATEGORY
(
CATEGORY_CD CHAR(16) NOT NULL,
LL_CATEGORY_CD CHAR(3),
L_CATEGORY_CD CHAR(3),
M_CATEGORY_CD CHAR(3),
S_CATEGORY_CD CHAR(3),
SS_CATEGORY_CD CHAR(3),
CATEGORY_NAME VARCHAR(255) NOT NULL
)
;
▼データ
C001000000000000,001,000,000,000,000,ファッション
C001001000000000,001,001,000,000,000,レディースファッション
C001001001000000,001,001,001,000,000,レディース、婦人服
C001001001001000,001,001,001,001,000,ワンピース
C001001001001001,001,001,001,001,000,半袖

ここから以下の階層の形でデータを取得したいです。

レディース、婦人服(件数)
ワンピース(2)
ボトムス、パンツ(1)
このワンピースとボトムス、パンツのそれぞれの件数を取得したのですが、
ワンピースカテゴリと半袖カテゴリの2を出したいのです。
サンプルSQLを教えていただきたいです。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/10/16 20:34:47
  • 終了:2013/10/23 20:35:03

回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492013/10/17 03:51:47

ポイント300pt

CATEGORY_CD の先頭から13桁で判断すれば良いなら、下記のような具合。

SELECT
    (
        SELECT CATEGORY_NAME
        FROM T_CATEGORY t2
        WHERE t2.CATEGORY_CD = MIN( t1.CATEGORY_CD )
        LIMIT 0, 1
    ) `レディース`,
    count(*) `婦人服(件数)`
FROM T_SHOUHIN_CATEGORY t1
GROUP BY LEFT( t1.CATEGORY_CD, 13 )
;

結果

レディース婦人服(件数)
ワンピース2
ボトムス、パンツ1

動作確認はMySQL 5.1.69にて実施。
下記は質問文より作成したサンプルデータ。

CREATE TEMPORARY TABLE T_SHOUHIN_CATEGORY (
    SHOUHIN_CD VARCHAR(13) NOT NULL,
    CATEGORY_CD CHAR(16)
);
INSERT INTO T_SHOUHIN_CATEGORY VALUES
( '11111', 'C001001001001000' ),
( '22222', 'C001001001002000' ),
( '33333', 'C001001001001001' )
;
CREATE TEMPORARY TABLE T_CATEGORY (
    CATEGORY_CD CHAR(16) NOT NULL,
    LL_CATEGORY_CD CHAR(3),
    L_CATEGORY_CD CHAR(3),
    M_CATEGORY_CD CHAR(3),
    S_CATEGORY_CD CHAR(3),
    SS_CATEGORY_CD CHAR(3),
    CATEGORY_NAME VARCHAR(255) NOT NULL
);
INSERT INTO T_CATEGORY VALUES
( 'C001000000000000', '001', '000', '000', '000', '000', 'ファッション' ),
( 'C001001000000000', '001', '001', '000', '000', '000', 'レディースファッション' ),
( 'C001001001000000', '001', '001', '001', '000', '000', 'レディース、婦人服' ),
( 'C001001001001000', '001', '001', '001', '001', '000', 'ワンピース' ),
( 'C001001001001001', '001', '001', '001', '001', '000', '半袖' ),
( 'C001001001002000', '001', '001', '001', '001', '000', 'ボトムス、パンツ' )
;

こういったものを作りたい場合は、
まずは単一のテーブルでベースを作ります。
名前を入れる前はこのような感じになりますので、
上記と比較してみてください。

SELECT
    MIN( t1.CATEGORY_CD ) `レディース`,
    count(*) `婦人服(件数)`
FROM T_SHOUHIN_CATEGORY t1
GROUP BY LEFT( t1.CATEGORY_CD, 13 )
;
レディース婦人服(件数)
C0010010010010002
C0010010010020001
id:yayayai

ありがとうございます!!試してみます!おそらくleftで13としている部分を10にすれば、それ以下からさまった件数になりそうですし(・∀・)

2013/10/17 09:41:22

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません