ahmed_sa Ответов: 1

Как отделить значение, существующее в таблице temp, динамически разделенное запятой ?


проблема

Как отделить значение, существующее в таблице temp, динамически разделенное запятой ?

я работаю на sql server 2012 мне нужно отделить поле TeamName запятой

teamname ,дата teamname+''

мне нужно зациклиться на teamname, поданном в таблице tmp #Teams, а затем разделиться запятой, и каждое поле будет следующим полем + 'дата'

действительно #временная таблица #Команды каждый раз менялись, так что у меня нет статических данных, поэтому мне нужно каким-то образом динамически разделять поле

а вторым будет поле+Дата

мне нужен результат как
Пакет,PackageDate,Параметрический,ParametricDate,Скрайбирования,ScribingDate,Жизненный Цикл,LifecycleDate

Что я уже пробовал:

CREATE TABLE #Teams
(
TeamId int,
TeamName  nvarchar(200)
)
insert into #Teams(TeamId,TeamName) values
 (1,'Package'),
 (2,'Parametric'),
 (3,'Scribing'),
 (4,'Lifecycle')

CHill60

Во-первых, вам не нужно "петлять". Покажите нам некоторые примеры данных, чтобы помочь понять, что вы просите - например, вы не показали нам никаких данных, разделенных запятыми

1 Ответов

Рейтинг:
10

Maciej Los

Если я вас хорошо понимаю... вы хотите преобразовать строки в один столбец.

Взгляните на эти статьи: TSQL – конкатенация строк с использованием FOR XML PATH() | Sql и Me[^]
STUFF AND FOR XML PATH for String Concatenation :: SQL Server[^]

Вы также можете использовать КТОС[^]:

DECLARE @Teams TABLE (TeamId int, TeamName  nvarchar(200))

insert into @Teams(TeamId,TeamName)
values (1,'Package'),
(2,'Parametric'),
(3,'Scribing'),
(4,'Lifecycle')

;WITH CTE AS
(
	SELECT 1 AS tid, CAST(TeamName AS VARCHAR(MAX)) AS ResultField
	FROM @Teams
	WHERE TeamId = 1
	UNION ALL
	SELECT tid+ 1,  CAST(CONCAT(c.ResultField, ',', t.TeamName) AS VARCHAR(MAX)) AS ResultField
	FROM CTE AS c INNER JOIN @Teams AS t ON c.tid +1 = t.TeamId
	WHERE EXISTS(SELECT TeamId FROM @Teams WHERE TeamId = tid+1)
)
SELECT TOP(1) ResultField 
FROM CTE 
ORDER BY tid DESC