SQL Server SELECT文で行番号を表示
関数:ROW_NUMBER()を使って、SELECT文で行番号を表示
※ROW_NUMBER関数:結果セットのパーティション内の行のシーケンス番号を返す
例1)まずは単純に行番号を取得
create table test01_tbl(
t_id bigint
,t_name nvarchar(20)
,createat datetime default current_timestamp
,updateat datetime
,primary key (t_id)
);
insert into test01_tbl(t_id,t_name) values(1,'テスト 太郎');
insert into test01_tbl(t_id,t_name) values(2,'テスト 二郎');
insert into test01_tbl(t_id,t_name) values(3,'テスト 三郎');
insert into test01_tbl(t_id,t_name) values(4,'テスト 史郎');
insert into test01_tbl(t_id,t_name) values(5,'テスト 吾郎');
insert into test01_tbl(t_id,t_name) values(6,'テスト 六郎');
insert into test01_tbl(t_id,t_name) values(7,'テスト 七郎');
delete from test01_tbl where t_id = 6;
-- 行番号を表示
SELECT
ROW_NUMBER() OVER(ORDER BY a.t_id ASC) AS 'ROW_NO'
,t_id
,t_name
FROM dbo.test01_tbl as a;
例2)PARTITION BY 句を使って、指定した項目単位で連番を取得・表示
create table test02_tbl(
t_id bigint identity
,t_name nvarchar(20)
,t_group char(1)
,primary key (t_id)
);
insert into test02_tbl(t_name,t_group) values('テスト 太郎','A');
insert into test02_tbl(t_name,t_group) values('テスト 二郎','B');
insert into test02_tbl(t_name,t_group) values('テスト 三郎','A');
insert into test02_tbl(t_name,t_group) values('テスト 史郎','B');
insert into test02_tbl(t_name,t_group) values('テスト 吾郎','A');
insert into test02_tbl(t_name,t_group) values('テスト 六郎','C');
insert into test02_tbl(t_name,t_group) values('テスト 七郎','C');
delete from test02_tbl where t_id = 6;
SELECT
t_name
,t_group
,ROW_NUMBER() OVER(PARTITION BY a.t_group ORDER BY a.t_group) AS 'グループ毎の連番'
FROM dbo.test02_tbl as a;