Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как реализовать такой запрос [MSSQL]


Kalinka ©   (2002-09-04 13:58:00) 

В таблице есть 2 поля:
ID int
Name varchar(1)

ID Name
1 a
1 b
2 c
3 d

надо одним запросом (без курсоров) получить выборку:
ID Name
1 a,b
2 c
3 d


Shaman_Naydak   (2002-09-04 22:25:00) [1]


> wicked © (04.09.02 20:38)

Практически как курсор :)
То есть для каждой записи из выборки выполняется
@Result = @Result + "," + Name,
а для первой (так как при этом @Result = NULL),
@Result = Name

И вся недолга


wicked   (2002-09-04 20:38:00) [2]


> SELECT @Result=COALESCE(@Result+",", "")+Name
> FROM Table1
> WHERE ID=@ID

хм... чё то я не пойму, как сия конструкция работает?...


3JIA9I CyKA   (2002-09-04 17:07:00) [3]

Да, пожалуй.


Shaman_Naydak   (2002-09-04 14:29:00) [4]

Мда, мне понравился вопрос! Короче, если у тебя 2000 MSSQL, то можно сделать следующий финт ушами (вроде как без курсоров, так что условие выполнено!):
CREATE FUNCTION dbo.ConcatNames(@ID int) RETURNS varchar(256)
AS
BEGIN
DECLARE @Result varchar(256)
SELECT @Result=COALESCE(@Result+",", "")+Name
FROM Table1
WHERE ID=@ID

RETURN @Result
END

А вот и сам запросик:
SELECT ID, dbo.ConcatNames(ID) FROM Table1
GROUP BY ID


3JIA9I CyKA   (2002-09-04 14:01:00) [5]

IMHO нет


Наверх

Титульная страница Поиск, карта сайта Написать письмо