1
私はSQL Server 2012でウィンドウ関数を使用していましたが、カーソルを避けて行ごとに移動したいので、これを動作させることはできません。私の問題は、各レコードにグループ番号を追加する必要があることです。トリッキーな部分は、カラム値が変更されるたびに、レコードのシーケンスの前に存在していた値に戻っても、グループ番号が増加する必要があるということです。列の値が変更されたときに、SQL Server 2012のシーケンシャルレコードにグループ番号を追加するにはどうすればよいですか?
は、ここではデータの例だと、私の希望する結果:
if object_id('tempdb..#data') is not null
drop table #data
create table #data
(
id int identity(1,1)
,mytime datetime
,distance int
,direction varchar(20)
)
insert into #data (mytime, distance, direction)
values
('2016-01-01 08:00',10,'North')
,('2016-01-01 08:30',18,'North')
,('2016-01-01 09:00',15,'North')
,('2016-01-01 09:30',12,'South')
,('2016-01-01 10:00',16,'South')
,('2016-01-01 10:30',45,'North')
,('2016-01-01 11:00',23,'North')
,('2016-01-01 11:30',14,'South')
,('2016-01-01 12:00',40,'South')
望ましい結果:
mytime Distance Direction GroupNumber
--------------------------------------------------------
2016-01-01 8:00 10 North 1
2016-01-01 8:30 18 North 1
2016-01-01 9:00 15 North 1
2016-01-01 9:30 12 South 2
2016-01-01 10:00 16 South 2
2016-01-01 10:30 45 North 3
2016-01-01 11:00 23 North 3
2016-01-01 11:30 14 South 4
2016-01-01 12:00 40 South 4
は、ウィンドウ関数を使用して、このことは可能ですか?
WITH T
AS (SELECT *,
CASE
WHEN LAG(direction)
OVER (ORDER BY ID) = direction THEN 0
ELSE 1
END AS Flag
FROM #data)
SELECT mytime,
Distance,
Direction,
SUM(Flag) OVER (ORDER BY id) AS GroupNumber
FROM T
上記のだろう
。 –
これは素晴らしいことです。私は方向フィールドのNULL値や空白の値があると思いますが、それらをフィルタリングしている可能性があります。 – BeachBum