2013-12-03 6 views
1

У меня есть таблица в SQL Server, который имеет данные, какотдельная каскадная строка в SQL Server 2008

ID Name Des 
1 A  Text1, Text2 
2 B  Text3, Text4 

Необходимо выбрать заявление, чтобы получить данные, такие как:

ID Name Des 
1  A  Text1 
1  A  Text2 
2  B  Text3 
2  B  Text4 
+0

я не уверен, я понимаю ваш вопрос - можете ли вы дать более подробный пример данных в таблице и каков ваш ожидаемый результат? Где находятся значения «А» и «В» из второго заявления? – Mike

+0

первые 2 строки во 2-й таблице относятся к первой строке 1-й таблицы, 1-я строка имеет значение 1 A Text1, Text2, необходимо разбить ее на 2 строки, row1 (1 A Text1) и row2 (1 A Text2) и т. д. для других строк в таблице ist – Vikram

ответ

2

Вы можете использовать Split - которая работает также и на SQL Server 2005 (который я использую):

CREATE FUNCTION [dbo].[Split] 
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @ItemTable TABLE (Item VARCHAR(250)) 
AS  

BEGIN  
    DECLARE @tempItemList NVARCHAR(MAX) 
    SET @tempItemList = @ItemList 

    DECLARE @i INT  
    DECLARE @Item NVARCHAR(4000) 

    SET @i = CHARINDEX(@delimiter, @tempItemList) 

    WHILE (LEN(@tempItemList) > 0) 
    BEGIN 
     IF @i = 0 
      SET @Item = @tempItemList 
     ELSE 
      SET @Item = LEFT(@tempItemList, @i - 1) 
     INSERT INTO @ItemTable(Item) VALUES(@Item) 
     IF @i = 0 
      SET @tempItemList = '' 
     ELSE 
      SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i) 
     SET @i = CHARINDEX(@delimiter, @tempItemList) 
    END 
    RETURN 
END 

Тогда этот запрос возвращает свой результат:

SELECT ID, 
     Name, 
     Split.Item AS Des 
FROM dbo.TableName t 
CROSS APPLY [dbo].[Split](t.Des, ',') Split 

Demonstration

+0

его не работает над моей таблицей, она возвращает только первую строку следующим образом: 1 A Text1 2 B Text3 любая идея – Vikram

+0

@ Викрам: К сожалению, я не заметил, что у вас есть прокомментировал. Как вы можете видеть, я использовал ваши образцы данных в [sql-скрипке] (http://www.sqlfiddle.com/#!6/13344/1/0) и возвращает желаемый результат. –

0

попробовать это,

select id,name,substr(Des,0,instr(Des,1)) as des 
from TableName 
union 
select id,name,substr(Des,instr(Des,1)+1) as des 
from TableName 
Смежные вопросы