2013-06-26 1 views
1
ID   Dates           Qty  Secs DayPart 

CO138491-02 06/10/2013,06/11/2013,06/12/2013,06/13/2013 4  6.00 Morning 

Как я могу изменить эти значения, разделенные запятыми и иметь результат, как это без использования КТР сог я на SQL Server 2000, и его лучше, если мы не будем использовать цикл COz последняя данных будет огромнымсоздать строку с каждым значением CSV

CO138491-02 06/10/2013 4 6.00 Morning 
CO138491-02 06/11/2013 4 6.00 Morning 
CO138491-02 06/12/2013 4 6.00 Morning 
CO138491-02 06/13/2013 4 6.00 Morning 

Любой намек был бы оценен или любую ссылку, чтобы ограничить мой поиск

ответ

4

Попробуйте

SELECT   a.ID, 
       SUBSTRING(',' + a.Dates + ',', n.Number + 1, CHARINDEX(',', ',' + a.Dates + ',', n.Number + 1) - n.Number - 1) AS [Value] 
       , [Qty], [Secs], [DayPart] 
FROM   Table1 AS a 
INNER JOIN  master..spt_values AS n ON SUBSTRING(',' + a.Dates + ',', n.Number, 1) = ',' 
WHERE   n.Type = 'p' 
       AND n.Number > 0 
       AND n.Number < LEN(',' + a.Dates + ',') 

Проверьте ссылку ниже для справки

http://www.codeproject.com/Questions/526739/ConvertplusColumnplusdataplusintoplusRowsplusthrou

1

Если вы не хотите использовать КТР или петли, попробуйте использовать подход с дополнительной таблицей чисел:

См http://www.sommarskog.se/arrays-in-sql-2000.html#tblnum-core

Что-то вроде:

CREATE FUNCTION inline_split_me (@param varchar(7998)) RETURNS TABLE AS 
    RETURN(SELECT substring(',' + @param + ',', Number + 1, 
        charindex(',', ',' + @param + ',', Number + 1) - Number - 1) 
       AS Value 
      FROM Numbers 
      WHERE Number <= len(',' + @param + ',') - 1 
      AND substring(',' + @param + ',', Number, 1) = ',') 
+0

На самом деле я не хочу, сплиттер, а каждый значение с разделенными строками, кроме того, поскольку его огромные данные i s разумно использовать функцию ?? – brykneval

+0

Я не знаю другого способа, кроме функции в этом случае. Наиболее эффективным способом является использование функции CLR, но она не работает в MSSQL2000 –