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 ) ;
レディース | 婦人服(件数) |
C001001001001000 | 2 |
C001001001002000 | 1 |