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
Насколько я знаю в 2000/2005 MS SQL только так, хотя м.б. в 2008 придумали какой-нибудь красивый агрегат который бы собирал данные в строчку...
П.С. Русские названия таблиц это жесть какая-то, неужели кому-то удобно воспринимаеться =)
Жесть, но так понятнее =)
Код:
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
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