2017-05-12 11 views
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 

のような出力をしたいので、

+0

をお楽しみください!その場合は、REPLACE機能を使用してください。しかし、私は何かが欠けているに違いないと感じています。 – nscheaffer

+0

カンマを削除して次の行に値を表示 – vishu

答えて

0

にこの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 

だから、あなただけのカンマを削除したいノエル

+0

あなたはあまりにも良いです@nscheaffer – vishu