oracleやsqlserverでは、項目毎に連番を付与する関数が提供されている。
◆row_number関数
SELECT
商品コード
, ROW_NUMBER() OVER ( PARTITION BY 商品コード ORDER BY 商品コード DESC ) ROW
FROM shouhin_tbl
;
SELECT
商品コード
, ROW_NUMBER() OVER ( PARTITION BY 商品コード ORDER BY 商品コード DESC ) ROW
FROM shouhin_tbl
;
SELECT 商品コード , ROW_NUMBER() OVER ( PARTITION BY 商品コード ORDER BY 商品コード DESC ) ROW FROM shouhin_tbl ;
mysqlでは上記関数が無い為、以下で対応。
◆concat_ws関数を利用
SELECT
t.商品コード
, @row_num := IF(@prev_value=concat_ws('',t.商品コード),@row_num+1,1) as row
,@prev_value := concat_ws('',t.商品コード) as prev_value
FROM
shouhin_tbl t,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY
t.商品コード
;
SELECT
t.商品コード
, @row_num := IF(@prev_value=concat_ws('',t.商品コード),@row_num+1,1) as row
,@prev_value := concat_ws('',t.商品コード) as prev_value
FROM
shouhin_tbl t,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY
t.商品コード
;
SELECT t.商品コード , @row_num := IF(@prev_value=concat_ws('',t.商品コード),@row_num+1,1) as row ,@prev_value := concat_ws('',t.商品コード) as prev_value FROM shouhin_tbl t, (SELECT @row_num := 1) x, (SELECT @prev_value := '') y ORDER BY t.商品コード ;
