トップ回答者
連続するレコードのみをまとめるSQLって組めますでしょうか?

質問
回答
-
単純な GROUP BY というわけにも行かないので、
LAG 関数を使って連続性を調査するのが良いと思います。WITH 例 AS (SELECT *, 継続性 = CASE WHEN 順序 = 1 OR 工程 <> LAG(工程, 1) OVER (ORDER BY 順序, ID) THEN N'新' ELSE N'続' END FROM 元table) SELECT 順序 = ROW_NUMBER() OVER (ORDER BY 順序), 工程 FROM 例 WHERE 継続性 = N'新' ORDER BY 順序
- 回答としてマーク HIRO_KU 2020年9月4日 14:09
-
一つのステートメントにこだわらなければ、以下のように実装することはできるかと。 ストアドプロシージャ化すれば、アプリケーション側からはストアドプロシージャの呼び出しのみで結果セットを取得することができるかと思います。
create table #TempTable1 (id int IDENTITY(1,1), Seq int, Process nvarchar(50)); declare @Id int; declare @Seq int; declare @Pro nvarchar(50); declare @Prob nvarchar(50); declare cur1 cursor static for select * from table1 order by ID, 順序; open cur1; fetch next from cur1 into @Id, @Seq, @Pro; while @@FETCH_STATUS = 0 begin if @Prob is null or @Prob != @Pro begin insert into #TempTable1 values(@Seq, @Pro); end set @Prob = @Pro; fetch next from cur1 INTO @Id, @Seq, @Pro; end select id as '順序', Process as '工程' from #TempTable1; close cur1; deallocate cur1; drop table #TempTable1
- 回答としてマーク HIRO_KU 2020年9月4日 14:09
すべての返信
-
単純な GROUP BY というわけにも行かないので、
LAG 関数を使って連続性を調査するのが良いと思います。WITH 例 AS (SELECT *, 継続性 = CASE WHEN 順序 = 1 OR 工程 <> LAG(工程, 1) OVER (ORDER BY 順序, ID) THEN N'新' ELSE N'続' END FROM 元table) SELECT 順序 = ROW_NUMBER() OVER (ORDER BY 順序), 工程 FROM 例 WHERE 継続性 = N'新' ORDER BY 順序
- 回答としてマーク HIRO_KU 2020年9月4日 14:09
-
一つのステートメントにこだわらなければ、以下のように実装することはできるかと。 ストアドプロシージャ化すれば、アプリケーション側からはストアドプロシージャの呼び出しのみで結果セットを取得することができるかと思います。
create table #TempTable1 (id int IDENTITY(1,1), Seq int, Process nvarchar(50)); declare @Id int; declare @Seq int; declare @Pro nvarchar(50); declare @Prob nvarchar(50); declare cur1 cursor static for select * from table1 order by ID, 順序; open cur1; fetch next from cur1 into @Id, @Seq, @Pro; while @@FETCH_STATUS = 0 begin if @Prob is null or @Prob != @Pro begin insert into #TempTable1 values(@Seq, @Pro); end set @Prob = @Pro; fetch next from cur1 INTO @Id, @Seq, @Pro; end select id as '順序', Process as '工程' from #TempTable1; close cur1; deallocate cur1; drop table #TempTable1
- 回答としてマーク HIRO_KU 2020年9月4日 14:09