2013-11-22 3 views
2

Я использую SQL Server 2008. У меня есть функция split, называемая func_SPLIT(@Str as varchar(2000)), которая примет строку типа «123, 456, 789» и разделит их на формат таблицы, такой как:SQL Server: объединить данные в формат таблицы

Column: 
123 
456 
789 

Так, если выбрать одну единственную запись, я могу разделить эту строку в виде таблицы ... объединение их позже ....

Вот проблема, которую я пытаюсь понять вне как сделать.

Скажем, у меня есть вопрос:

Select Column1, Column2 
from Table1 

и возвращает несколько записей, как показано ниже:

Column1  Column2 
a   11111, 22222, 33333 
b   44444 
c   55555, 66666 
d   88888, 99999 

Есть ли способ я могу преобразовать все эти значения в COLUMN2 в виде таблицы , поэтому я могу присоединиться к ним позже ... как этот формат ниже:

Column1  Column2 
a   11111 
a   22222 
a   33333 
b   44444 
c   55555 
c   66666 
d   88888 
d   99999 

Это раскол funcion

ALTER FUNCTION [dbo].[Split] 
( 
    @RowData NVARCHAR(MAX), 
    @Delimeter NVARCHAR(MAX) 
) 
RETURNS @RtnValue TABLE 
(
    ID INT IDENTITY(1,1), 
    Data NVARCHAR(MAX) 
) 
AS 
BEGIN 
    DECLARE @Iterator INT 
    SET @Iterator = 1 

    DECLARE @FoundIndex INT 
    SET @FoundIndex = CHARINDEX(@Delimeter,@RowData) 

    WHILE (@FoundIndex>0) 
    BEGIN 
     INSERT INTO @RtnValue (data) 
     SELECT 
      Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1))) 

     SET @RowData = SUBSTRING(@RowData, 
       @FoundIndex + DATALENGTH(@Delimeter)/2, 
       LEN(@RowData)) 

     SET @Iterator = @Iterator + 1 
     SET @FoundIndex = CHARINDEX(@Delimeter, @RowData) 
    END 

    INSERT INTO @RtnValue (Data) 
    SELECT Data = LTRIM(RTRIM(@RowData)) 

    RETURN 
END 

Спасибо,

+0

мы можем видеть функцию разделения у вас есть? –

+0

Обновлено с помощью функции split. спасибо за изучение этого ... – milacay

ответ

3

Вы можете использовать CROSS APPLY присоединиться:

SELECT Column1, Data 
FROM MYTABLE CROSS APPLY dbo.Split(Column2, ',') 

Демо: http://sqlfiddle.com/#!3/4e15d/1

+0

Ничего себе, супер! Огромное спасибо. оно работает! – milacay

Смежные вопросы