Лучший отвечающий
sql объединение строк типа varchar

Вопрос
-
Добрый день!
Подскажите, можно ли средствами sql объединить первые 3 строки? Нужно объединить 'UserLogin'.
Чтобы в ячейке было: 'izanegin_akorovin_vpupkin'.
Не хочется эту задачу обрабатывать в C#.
14 апреля 2015 г. 12:15
Ответы
-
Вот так можно:
create table #table (UserLogin varchar(max), GUID uniqueidentifier) print newid() insert #table values ('a', 'ABC8896B-29F1-44D2-AB19-698B27CE6593') insert #table values ('b', '4B6BF634-5A65-48C6-A171-633C535CABCB') insert #table values ('c', 'ABC8896B-29F1-44D2-AB19-698B27CE6593') insert #table values ('d', '4B6BF634-5A65-48C6-A171-633C535CABCB') insert #table values ('e', 'ABC8896B-29F1-44D2-AB19-698B27CE6593') insert #table values ('f', 'D3012FD3-7060-4811-BB62-454ECC1A8D07') declare @result varchar(max) select distinct GUID, (select top 3 UserLogin + '_' from #table where GUID = t.GUID for xml path('')) from #table t print @result drop table #table
- Помечено в качестве ответа ilya83 15 апреля 2015 г. 7:08
15 апреля 2015 г. 6:30Отвечающий
Все ответы
-
Добрый день.
Да, напишите курсор.
14 апреля 2015 г. 13:37Отвечающий -
понял, попробую поискать14 апреля 2015 г. 13:49
-
Я не совсем понял. Нужно получить из БД одно скалярное значение в виде объединённых первых трёх строк колонки UserLogin?
Остальные строки просто отсеять? А с колонкой гуидов что делать?
14 апреля 2015 г. 14:01 -
В принципе вот так можно:
- Изменено Алексей ЛосевEditor 14 апреля 2015 г. 14:15
14 апреля 2015 г. 14:15Отвечающий -
С данными из примера Алексея я набросал следующее:
declare @result varchar(max) with Logins_CTE (UserLogin) as ( select top 3 UserLogin from #table ) select @result = Coalesce(@result + '_', '') + UserLogin from Logins_CTE select @result
14 апреля 2015 г. 14:43 -
Есть ещё вариант с написанием кастомной агрегатной функции. Вариант самый универсальный, но требующий немного программирования на C#.14 апреля 2015 г. 19:45
-
Я извиняюсь, если не корректно сформулировал вопрос.
Я хочу полученную таблицу сгруппировать по повторяющимся GUID-ам. Т.е. первые три строки заменяются на одну вида:
UserLogin='izanegin_akorovin_vpupkin'
и
Guid='496463b8-953e-47d7-aa4c-24e052e9901a'
Остальные строки, если имеют уникальные Guid остаются без изменений. Таблица может быть значительно размера, так что привязываться к 'TOP 3' нельзя.
Я думаю надо сделать это как-то через цикл, хотя говорят циклы в sql работаю медленно.
15 апреля 2015 г. 6:18 -
Вот так можно:
create table #table (UserLogin varchar(max), GUID uniqueidentifier) print newid() insert #table values ('a', 'ABC8896B-29F1-44D2-AB19-698B27CE6593') insert #table values ('b', '4B6BF634-5A65-48C6-A171-633C535CABCB') insert #table values ('c', 'ABC8896B-29F1-44D2-AB19-698B27CE6593') insert #table values ('d', '4B6BF634-5A65-48C6-A171-633C535CABCB') insert #table values ('e', 'ABC8896B-29F1-44D2-AB19-698B27CE6593') insert #table values ('f', 'D3012FD3-7060-4811-BB62-454ECC1A8D07') declare @result varchar(max) select distinct GUID, (select top 3 UserLogin + '_' from #table where GUID = t.GUID for xml path('')) from #table t print @result drop table #table
- Помечено в качестве ответа ilya83 15 апреля 2015 г. 7:08
15 апреля 2015 г. 6:30Отвечающий -
Спасибо всем за ответы.
Алексей, последний вариант, то, что мне нужно. Спасибо.
Если не сложно объясните эту фразуfor xml path('')
- Изменено ilya83 15 апреля 2015 г. 7:19
15 апреля 2015 г. 7:09 -
Пожалуйста. Четче формулируйте вопросы, тогда и помогут быстрее ;)15 апреля 2015 г. 7:13Отвечающий