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


Автор: MaxxSoftware 8.11.2005, 09:46
ето сматрити.... есть вот така таблица
id | typ
============
2 | 1-358.00
2 | 2-659.00
3 | 1-563.20
4 | 4-9565.10
4 | 1-653.20

как мне с нее получить вот такое
a | b
=====================
2 | 1-358.00, 2-659.00
3 | 1-563.20
4 | 4-9565.10, 1-653.20

тоесть соезденить все поля с адним ИДом в строку, разделив при этом каким либо разделителем.

без временых таблиц...
зарание спасибо!

Автор: Akina 8.11.2005, 10:18
по-моему груповая операция конкатенации не определена... так что хранимая процедура тебя спасет.

Автор: MaxxSoftware 8.11.2005, 10:41
а если по подробнее... ну типа для лахов... smile

Автор: Akina 8.11.2005, 10:45
MS SQL - Help - Stored Procedures and Views

Автор: boevik 8.11.2005, 10:54
Цитата(MaxxSoftware @ 8.11.2005, 10:41)
а если по подробнее... ну типа для лахов... smile

Тогда через cursor и с временной таблицей
Код

create procedure sp1
as
create table @t
(
[id] int,
[typ] varchar(1000)
)
declare cur cursor for 
select id, typ
from table1
declare @id int
declare @typ varchar(50)

open cur 

fetch next from cur
into @id, @typ

while @@fetch_status = 0
begin
   select * from #t where [id] = @id
   if @@rowcount > 0 
      update #t
      set [typ] = [typ] + ', ' + @typ
      where [id] = @id
   else
      insert into #t
      values(@id, @typ)
   fetch next from cur
   into @id, @typ
end


И получится, что то типа такого.
Не проверял, возможны не точности

Автор: MaxxSoftware 8.11.2005, 14:25
ни работат smile запрос вообще вылитает по таймауту и возвращает кучу кучу таблиц, пустых.... ну в некаторых есть значения... но совсем не те что надо... вообще точнее не понятные значения....

Автор: Akina 8.11.2005, 14:57
MaxxSoftware smile а что, в Тюмени все такие безграмотные?

Автор: MaxxSoftware 8.11.2005, 15:23
угу smile неудача нам =)

Автор: boevik 8.11.2005, 18:51
OK, вот подправленная процедурка.
Принцип не изменился, но работает отлично
Код

--Создание таблицы
create  table tb1
(
[col1] int,
[col2] varchar(10)
)
go
--Заполнение значениями
insert into tb1
values(1,1)
insert into tb1
values(2,2)
insert into tb1
values(1,3)
insert into tb1
values(1,4)
insert into tb1
values(2,5)
insert into tb1
values(3,0)
insert into tb1
values(1,1)

go
--Создание процедуры
create procedure sp1
as
create  table #t
(
   [col1] int,
   [col2] varchar(1000)
)
declare cur  cursor for
select col1, col2
from tb1
declare @col1  int
declare @col2 varchar(50)

open cur

fetch next from  cur
into @col1, @col2
while @@fetch_status = 0
begin
  select * from #t where [col1] = @col1
  if @@rowcount > 0
      update #t
     set [col2] = [col2] + ', ' + ltrim(rtrim(@col2))
     where [col1] = @col1
  else
     insert into #t
     values(@col1, ltrim(rtrim(@col2)))
  fetch next from cur
  into @col1, @col2
end
close cur
deallocate cur
select * from #t
go
--Запуск процедуры
sp1


Автор: MaxxSoftware 9.11.2005, 07:39
Сильвупле! smile

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