Я пытался исследовать это, и я не могу найти что-то подобное.У меня есть таблица, в которую можно добавлять и удалять записи много раз.Я понятия не имею, сколько столбцов мне понадобится, поэтому мне нужен динамический круг.Все примеры, которые я вижу, используют функцию windows, но я поворачиваю адреса электронной почты.
Таблица будет выглядеть примерно так:
Number | Email
--------------
1 | email1@email.com
1 | email2@email.com
1 | email3@email.com
2 | email4@email.com
2 | email5@email.com
3 | email6@email.com
4 | email7@email.com
4 | email8@email.com
Я хочу, чтобы таблица выглядела так (когдавсе включено):
Number | Email1 | Email2 | Email3
---------------------------------------------------------------
1 | email1@email.com | email2@email.com | email3@email.com
2 | email4@email.com | email5@email.com |
3 | email6@email.com | |
4 | email7@email.com | email8@email.com |
Если бы номер 1 не был включен, он бы выглядел так:
Number | Email1 | Email2
--------------------------------------------
2 | email4@email.com | email5@email.com
3 | email6@email.com |
4 | email7@email.com | email8@email.com
Спасибо за помощь!
Вот код длясоздать макет таблицы:
CREATE TABLE #table
(number INT, email VARCHAR(30))
INSERT INTO #table (number, email)
VALUES (1,'email1@email.com')
,(1,'email2@email.com')
,(1,'email3@email.com')
,(2,'email4@email.com')
,(2,'email5@email.com')
,(3,'email6@email.com')
,(4,'email7@email.com')
,(4,'email8@email.com')
Это похоже на то, что я пробовал, я использовал счетчик, чтобы попытаться просто заставить его работать, но не смог.
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(Number)
FROM (SELECT p.Number FROM #table AS p
GROUP BY p.Name) AS x;
SELECT @columns
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
SELECT p.number, p.email
FROM #test p
) AS j
PIVOT
(
Count(email) FOR Name IN ('
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
+ ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;