0
ID NAME TYPE
1 ABC 1,2,3,4
2 PQR 2,3,5
3 XYZ 1,4
4 TCS 3,1
5 PPP 2,3
私はこの分割列の値
ID NAME TYPE
1 ABC 1
2
3
4
2 pqr 2
3
5
のような出力をしたいので、
ID NAME TYPE
1 ABC 1,2,3,4
2 PQR 2,3,5
3 XYZ 1,4
4 TCS 3,1
5 PPP 2,3
私はこの分割列の値
ID NAME TYPE
1 ABC 1
2
3
4
2 pqr 2
3
5
のような出力をしたいので、
にこの2つの基本的な課題があります。コンマ区切りの値のリストを分割し、IDとNAMEの最初のインスタンスのみを表示します。これを達成するためにより効率的または優雅な方法があるかもしれません。しかし、私はカーソルを使ってブルートフォースアプローチを選択しました。どうぞ。
IF OBJECT_ID('tempdb..#Temp', 'U') IS NOT NULL DROP TABLE #Temp;
IF OBJECT_ID('tempdb..#Results', 'U') IS NOT NULL DROP TABLE #Results;
CREATE TABLE #Temp (
ID INT
, NAME CHAR(3)
, TYPE VARCHAR(10)
)
CREATE TABLE #Results (
ID VARCHAR(3)
, NAME CHAR(3)
, TYPE VARCHAR(10)
)
INSERT INTO #Temp (ID, NAME, TYPE) VALUES (1, 'ABC', '1,2,3,4')
INSERT INTO #Temp (ID, NAME, TYPE) VALUES (2, 'PQR', '2,3,5')
INSERT INTO #Temp (ID, NAME, TYPE) VALUES (3, 'XYZ', '1,4')
INSERT INTO #Temp (ID, NAME, TYPE) VALUES (4, 'TCS', '3,1')
INSERT INTO #Temp (ID, NAME, TYPE) VALUES (5, 'PPP', '2,3')
DECLARE @First BIT
DECLARE @ValueList VARCHAR(100)
DECLARE @pos INT
DECLARE @len INT
DECLARE @value VARCHAR(100)
/* declare cursor variables */
DECLARE @ID INT
DECLARE @NAME CHAR(3)
DECLARE @TYPE VARCHAR(10)
DECLARE MyCursor CURSOR FAST_FORWARD READ_ONLY
FOR
SELECT * FROM #Temp
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ID, @NAME, @TYPE
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ValueList = @TYPE + ','
SET @pos = 0
SET @len = 0
SET @First = 1
WHILE CHARINDEX(',', @ValueList, @pos + 1) > 0
BEGIN
SET @len = CHARINDEX(',', @ValueList, @pos + 1) - @pos
SET @value = SUBSTRING(@ValueList, @pos, @len)
SET @pos = CHARINDEX(',', @ValueList, @pos + @len) + 1
IF (@First = 1)
BEGIN
INSERT INTO #Results (ID, NAME, TYPE) VALUES (@ID, @NAME, @value)
END
ELSE
BEGIN
INSERT INTO #Results (ID, NAME, TYPE) VALUES ('', '', @value)
END
SET @First = 0
END
FETCH NEXT FROM MyCursor INTO @ID, @NAME, @TYPE
END
CLOSE MyCursor
DEALLOCATE MyCursor
SELECT * FROM #Results
だから、あなただけのカンマを削除したいノエル
あなたはあまりにも良いです@nscheaffer – vishu
、
をお楽しみください!その場合は、REPLACE機能を使用してください。しかし、私は何かが欠けているに違いないと感じています。 – nscheaffer
カンマを削除して次の行に値を表示 – vishu