Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование GROUP BY в T-SQL  [new]
Torrero11
Member

Откуда:
Сообщений: 33
Друзья, пытаюсь в MSQLServer2012 реализовать представление:
+

SELECT        TOP (100) PERCENT dbo.[Образоват программы].[Название программы], dbo.[Образоват программы].Тип, dbo.[Образоват программы].[Возраст обучающихся], 
                         dbo.[Образоват программы].[Срок реализации], dbo.[Образоват программы].[Год разработки], dbo.[Образоват программы].[Уровень освоения], 
                         dbo.Направленность.Название AS Направленность, dbo.Отделы.Название AS Отдел, dbo.Сотрудники.Фамилия, dbo.Сотрудники.Имя, 
                         dbo.Сотрудники.Отчество, dbo.Сотрудники.[Код сотрудника]
FROM            dbo.[Сотрудники реализуют программы] INNER JOIN
                         dbo.Сотрудники ON dbo.[Сотрудники реализуют программы].[Код сотрудника] = dbo.Сотрудники.[Код сотрудника] INNER JOIN
                         dbo.[Образоват программы] ON dbo.[Сотрудники реализуют программы].[Код программы] = dbo.[Образоват программы].[Код программы] INNER JOIN
                         dbo.Направленность ON dbo.[Образоват программы].[Код направленности] = dbo.Направленность.[Код направленности] INNER JOIN
                         dbo.Отделы ON dbo.[Образоват программы].[Код отдела] = dbo.Отделы.[Код отдела]
ORDER BY dbo.[Образоват программы].[Название программы]

Картинка с другого сайта.

Но не получается сгруппировать строки таким образом, чтобы вместо столбцов "Фамилия", "Имя", "Отчество", "Код сотрудника" был только 1 столбец "Авторы" и в этом столбце были перечислены ФИО авторов через запятую.
К примеру, вместо первых двух строк представления, изображённого на картинке выше, должна быть одна строка со следующими значениями:
| программа 1 | типовая | 14-21 года | 1 год | 2005 | досуговый | Х-э | Х-э | Петрова Анна Ивановна (2), Иванова Галина Петровна (3) |

Помнится, делал подобные вещи в PostgreSQL с помощью GROUP BY, но что-то не получается прошлый опыт реализовать в T-SQL.
14 апр 13, 14:13    [14178007]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Edkonst2008
Member

Откуда:
Сообщений: 503
ОФФ - Кто же Вас учил по русски таблицы и поля обзывать....

По существу. Варианты :
1) Попробовать PIVOT
2) В Факе есть пример столбец в строку.
14 апр 13, 14:30    [14178037]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Edkonst2008
Member

Откуда:
Сообщений: 503
Pivot тут не причем, сорри.
14 апр 13, 14:31    [14178038]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Torrero11
Member

Откуда:
Сообщений: 33
Edkonst2008
ОФФ - Кто же Вас учил по русски таблицы и поля обзывать....


:) Это логическая схема, я специально в ней сделал, для наглядности.
Edkonst2008
2) В Факе есть пример столбец в строку.

Благодарю, буду изучать ФАК.
14 апр 13, 14:52    [14178076]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Илья Петров
Member

Откуда:
Сообщений: 43
Если я правильно понял человеку требуется аналог аггрегатной функции LIST() из FireBird. Если ее в MS SQL нет то ее легко написать воспользуясь всей мощью расширенных процедур на С# в MS SQL. Примеров как писать такие процедуру в сети предостаточно.
14 апр 13, 17:16    [14178409]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
;with preSel as(
select distinct 
	t.[Название программы]
from @t t
)			
select 
t.[Название программы]
,(stuff(lektors.val,1,2,'')) as [авторы]

from preSel t
cross apply (select ', ' +tt.[Фамилия] from @t tt where tt.[Название программы] = t.[Название программы] for XML path('')) lektors(val)
15 апр 13, 10:08    [14179991]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
If Object_Id('tempdb..#Table') > 0 Drop Table #Table
Create Table  #Table ( F  Varchar(2),  FF Varchar(10), FFF Varchar(10)) 


Insert Into #Table Select  'aa','xxx','yyy'
Insert Into #Table Select  'bb','xxx','yyy'

DECLARE 
  @Agg varchar(max) 
SET @Agg = ''
SELECT @Agg = @Agg+ F + ', ' FROM  #Table

SELECT DISTINCT  [Field2Line]= @agg, FF, FFF FROM #Table
15 апр 13, 10:29    [14180091]     Ответить | Цитировать Сообщить модератору
 Re: Использование GROUP BY в T-SQL  [new]
Torrero11
Member

Откуда:
Сообщений: 33
Друзья, спасибо! Буду пробовать.
15 апр 13, 13:23    [14181401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить