oracleやsqlserverでは、項目毎に連番を付与する関数が提供されている。

◆row_number関数

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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関数を利用

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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.商品コード
;
項目に連番つける

この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事