Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > склеить значение текстового поля при групперовке


Автор: torandrey 11.1.2008, 12:15
Здравствуйте
Подскажите плиз, как при групперовке склеить значения текстового поля
A   B
1   Q
1   W
1   E
2   R

---------------

A   B
1   QWE
2   R

 вот как-то так бы получить

Автор: SharedNoob 11.1.2008, 13:59
Здается мне что только в цикле.

Первое что пришлов голову:
Код

Create table #T1 (npp int identity(1,1), A int, B varchar(50))
insert into #T1 (A, B) values (1, 'B')
insert into #T1 (A, B) values (1, 'Q')
insert into #T1 (A, B) values (1, 'W')
insert into #T1 (A, B) values (2, 'R')

Create table #T2 (npp int identity(1,1), A int, B varchar(50))
declare @npp int, @nppmax int, @A int, @B varchar(50)
Set @npp=0
Set @nppmax=(select max(npp) from #T1)
While @npp<>@nppmax
   begin
    Set @npp=@npp+1
    select @A=A, @B=B 
        from #T1 t
        where npp=@npp
    If not exists (select top 1 A from #T2 where A=@A) 
        begin
        insert into #T2 (A, B) values (@A, @B)
        end
      Else
        begin
        Update t set
            B=B+@B
            from #T2 t
            where A=@A
        end
   end

select * from #T1
select * from #T2



p.s
я писал на синтаксисе SQL 2000, в теге SQL используется как я понимаю синтаксис MySql

Автор: torandrey 11.1.2008, 15:01
Спасибо
нечто подобное я уже написал
надеялся что можно без циклов решить вопрос, чего-нибудь типо SUM, но для строк подскажут, но похоже на 2000 не судьба

Автор: SharedNoob 11.1.2008, 17:24
Sum() в SQL 200 нельзя применять к полям типа Char, Varchar. Но кстати если цикл пустить то временной таблие, а еще если записей будет немного то вообще по таблице памяти, то все будет происходить очень и очень быстро.

Автор: Akina 11.1.2008, 18:54
В MS SQL функции, аналогичные MySQL-евской group_concat, отсутствуют.

Я бы пошел по пути создания хранимой процедуры, принимающей произвольный запрос и перечень полей для конкатенации, если задача частая, или по пути создания вьюхи, если операция одноразовая.

Автор: SergKO 12.1.2008, 09:15
Попробуйте воспользоваться этим алгоритмом

http://forum.vingrad.ru/index.php?showtopic=171506&view=findpost&p=1250083

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)