Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Объединение нескольких ячеек столбца в одну

56K
15 января 2010 года
Iserbius
2 / / 15.01.2010
Пишу такой код, для вывода общего метража труб, их размера, и параметров линии, в которую они входят. То что это труба, определяется из таблицы [Группы материалов], где напротив значения ИД_материала в столбце ИД_вида стоит 1.

 
Код:
SELECT        TOP (100) PERCENT Спецификации.[Назаначение линии], Спецификации.[Порядковый номер линии], SUM(Материалы.Количество) AS Количество,
                         Материалы.Размер
FROM            Материалы INNER JOIN
                         Спецификации ON Материалы.ИД_спецификации = Спецификации.ИД_спецификации INNER JOIN
                         Чертежи ON Спецификации.[Номер чертежа] = Чертежи.[Порядковый номер] INNER JOIN
                         [Группы материалов] ON Материалы.[Код оборудования] = [Группы материалов].ИД_материала
WHERE        ([Группы материалов].ИД_вида = 1)
GROUP BY Спецификации.[Назаначение линии], Спецификации.[Порядковый номер линии], Материалы.Размер
ORDER BY Спецификации.[Назаначение линии], Спецификации.[Порядковый номер линии]


Выводит такую таблицу:
Назнач... Порядк... Количес... Размер
AM 9003 537,00 200
AM 9003 513,60 250
AM 9004 1011,00 200
AM 9005 248,00 150
AM 9005 34,00 350

Как с помощью T-SQL перечислить все размеры в одной ячейке для одной линии, т.е. сделать таблицу в следующем виде:

Назнач... Порядк... Количес... Размер
AM 9003 1050,60 200, 250
AM 9004 1011,00 200
AM 9005 282,00 150, 350
385
15 января 2010 года
SomewherSomehow
477 / / 25.07.2004
Я бы написал пользовательскую функцию или подзапрос, которая на вход получает "порядковый номер линии" на выходе собирает все размеры по этой линии в строчку.

Насколько я знаю в 2000/2005 MS SQL только так, хотя м.б. в 2008 придумали какой-нибудь красивый агрегат который бы собирал данные в строчку...

П.С. Русские названия таблиц это жесть какая-то, неужели кому-то удобно воспринимаеться =)
56K
16 января 2010 года
Iserbius
2 / / 15.01.2010
Хм, а можешь дать хотя бы пример такого подзапроса?

Жесть, но так понятнее =)
385
18 января 2010 года
SomewherSomehow
477 / / 25.07.2004
ну вот для примера
Код:
declare @Table table(TableID int)
declare @TableDetails table (DetailID int, TableID int)

insert into @Table
select 1
union
select 2

insert into @TableDetails
select 1,1
union
select 2,1
union
select 3,2
union
select 4,2

-- способ с подзапросом (работает начиная с 2005)
select
    t.TableID,
    Details = (select convert(varchar(10),td.DetailID) + ', ' from @TableDetails td where t.TableID = td.TableID    for xml path(''))
from
    @Table t
   

-- способ с функцией
create function GetDetailsByTableID( @TableID int)
returns
    varchar(100)
as
begin
    declare @DetailsStr varchar(100)
    set @DetailsStr = ''
    select @DetailsStr = @DetailsStr + convert(varchar(10),DetailID) + ', ' from @TableDetails where TableID = @TableID
   
    return @DetailsStr
end

select
    t.TableID,
    Details = dbo.GetDetailsByTableID(t.TableID)
from
    @Table t
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог