次の形式のテーブルがあります(MS SQL Server 2008を使用しています)。
car_id | trace
1 1300275738;57.72588;11.84981;0.00026388888888888886;1300275793;57.72596;11.8529;0.001055...
トレース値は、デリミネーターとしてセミコロンを使用したcsv文字列です。トレース文字列の値は、次のように4つと4つにグループ化されます(改行がない場合を除く)。
1300275738;57.72588;11.84981;0.00026388888888888886;
1300275793;57.72596;11.8529;0.0010555555555555555;
1300275785;57.72645;11.85242;0.007416666666666665;
1300275780;57.72645;11.85242;0.0010138888888888888;
私がやりたいのは、4つのグループの最初の値に基づいてトレース文字列をソートする挿入時にトリガーを作成することです。したがって、上記の結果は次のようになります
1300275738;57.72588;11.84981;0.00026388888888888886;1300275780;57.72645;11.85242;0.0010138888888888888;1300275785;57.72645;11.85242;0.007416666666666665;1300275793;57.72596;11.8529;0.0010555555555555555;
私がやろうとしたことは、次のように一時テーブルの値を別々の行に分割することです。
USE tempdb
GO
checkpoint
dbcc dropcleanbuffers
dbcc freeproccache
GO
--declare a variable and populate it with a comma separated string
DECLARE @SQLString VARCHAR(MAX)
SET @SQLString = (SELECT trace FROM mypev_trips.dbo.trips)
--append a comma to the string to get correct results with empty strings or strings with a single value (no commas)
SET @SQLString = @SQLString + ';';
DECLARE @X XML
SET @X = CAST('<A>' + REPLACE(@SQLString, ';', '</A><A>') + '</A>' AS XML)
SELECT t.value('.', 'nvarchar(20)')
FROM @x.nodes('/A') as x(t)
これにより、次の結果が得られます。
(No column name)
1300275738
57.72588
11.84981
0.000263888888888888
1300275780
57.72645
11.85242
0.001013888888888888
.
.
一時テーブルを、4つの各グループの最初の値でソートされたコンマ区切りの文字列に戻す方法を知っている人はいますか?