преобразование строк в столбцы в t-sql - sql server 2005 - PullRequest
1 голос
/ 17 марта 2009

У меня есть ситуация, что у меня есть таблица в структуре

ID, name
 1, 'value1'
 1, 'value2'
 2, 'value3'
 2, 'value4'
 1, 'value5'

Я хотел показать вышеуказанные данные в следующем формате

id , combineName
1  ,'value1','value2', 'value5'
2  ,'value3','value4'

Есть ли простой способ сделать это в SQL Server 2005, или мне придется запускать курсоры, чтобы сделать это?

Ответы [ 4 ]

1 голос
/ 18 марта 2009

При условии, что ваши данные находятся в таблице:

create  FUNCTION toCSV (@id int)

RETURNS varchar(100)

AS

BEGIN

DECLARE @List varchar(100)

SELECT @List = COALESCE(@List + ', ', '') + 
   CAST(name AS varchar(10))

FROM aTable

WHERE ID = @id

RETURN(@list)

END;

go

Тогда:

выберите отдельный идентификатор dbo.toCSV (id) из таблицы

1 голос
/ 17 марта 2009

SQL 2005 имеет функцию PIVOT, которая должна делать то, что вы хотите. http://msdn.microsoft.com/en-us/library/ms177410.aspx

0 голосов
/ 29 мая 2009

Простой пример функции COALESCE:

Создана одна временная таблица, в которую я поместил 9 строк с помощью цикла WHILE. В основной части я просто перенес функцию Column to COALESCE.

DROP TABLE # Материал УСТАНАВЛИВАЙТЕ NOCOUNT ON СОЗДАТЬ ТАБЛИЦУ # Материал (

MaterialID INT

)

ОБЪЯВИТЬ @LoopCounter INT ОБЪЯВИТЬ @MaxLoopCounter INT

SET @LoopCounter = 1 SET @MaxLoopCounter = 10

WHILE (@LoopCounter <@MaxLoopCounter) НАЧАТЬ INSERT INTO #Material (MaterialID) ЗНАЧЕНИЯ (@LoopCounter) SET @LoopCounter = @LoopCounter + 1 END </p>

/ * ОСНОВНАЯ ЧАСТЬ * / ОБЪЯВИТЬ @MaterialID VARCHAR (100)

SELECT @MaterialID = COALESCE (@MaterialID + ',', '') + CAST (MaterialID AS VARCHAR (100)) ОТ # Материал

ПЕЧАТЬ 'ФИНАЛЬНЫЙ ВЫХОД:' + @ MaterialID

- ВЫБРАТЬ * ИЗ # Материала SET NOCOUNT OFF

0 голосов
/ 17 марта 2009

Вы можете сделать это с помощью вложенных выборок или проще с помощью оператора pivot, хотя вы должны знать все возможные значения заранее.

Если вы хотите, чтобы он был динамическим, вам понадобится курсор и немного динамического SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...