3

だから私はしばらくこれと戦ってきましたが、これは簡単な作業でなければならないと思いました. 私の目標は、返されたすべての一意の行をスラッシュで区切り、入力された時間順に並べた単一の文字列を返すことです。ここにサンプルデータがあります

表: 場所

Location   Time
========   =======
OR1        2013-02-06 16:55:47.000
OR1        2013-02-06 16:56:34.000
ICU1       2013-02-06 16:59:50.000
OR1        2013-02-06 17:02:50.000
ICU1       2013-02-06 17:09:50.000

したがって、上記のデータ テーブルが与えられた場合、この "OR1/ICU1" という文字列を返したいと考えています。FOR XML PATH を使用して個別の値を文字列として返すことができますが、ORDER BY を投入するとすぐにすべてがエラーで崩壊します。

アイデア?

4

2 に答える 2

0

クエリで一時テーブルと while ループを使用しますが、パフォーマンスに悪影響を与える可能性がある大規模な実稼働データに対して使用することはお勧めしません。

例えば。

/*Create our temp table */
DECLARE @MyTemp TABLE (Location VARCHAR(10), Processed BIT DEFAULT 0)

/*Load the temp table will all the distinct locations */    
INSERT INTO @MyTemp SELECT DISTCINT Location FROM Locations

/* need these variable to hold data */    
DECLARE @FinalString VARCHAR(1000) = ''
DECLARE @Location VARCHAR(10) = ''

/*as long as there is any row with an unprocessed location in the table 
we want to continue this process */
WHILE EXISTS(SELECT 1 FROM @MyTemp WHERE Processed = 0)
BEGIN
     /* Grab our next unprocessed location */
     SELECT TOP 1 @Location = Location FROM @MyTemp WHERE Processed = 0 ORDER BY Location
     /* Add it to the final string */
     SET @FinalString = @FinalString + '/' + @Location
     /* mark the location as processed */
     UPDATE @MyTemp SET Processed = 1 WHERE Location = @Location
END

/* get the final result (note this will have a leading '/') */
SELECT @FinalString
于 2014-01-28T21:59:10.267 に答える