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

Откуда: Норильск
Сообщений: 939
Всем доброго дня. Помогите пож-та составить правильно запрос и написать скалярную функцию (если можно обойтись без нее, то будет только лучше).

Вот скрипт куска таблицы с данными

DECLARE @t TABLE (id int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, razdel VARCHAR(10),form VARCHAR(50),tema VARCHAR(200),pravilo VARCHAR(200),fio VARCHAR(200),price DECIMAL(10,2)
,categ VARCHAR(100))
INSERT INTO @t
SELECT 'А','дневная','тест1','первое правило','Иванов',10000,'Руководители'
UNION
SELECT 'А','дневная','тест1','первое правило','Петров',20000,'Специалисты'
UNION
SELECT 'А','дневная','тест3','первое правило','Сидоров',30000,'Руководители'
UNION
SELECT 'А','вечерняя','тест2','второе правило','Огурцов',40000,'Руководители'
UNION
SELECT 'А','дневная','тест3','первое правило','Степанов',50000,'Специалисты'
UNION
SELECT 'А','вечерняя','тест2','второе правило','Яблоков',60000,'Руководители'
UNION
SELECT 'А','дневная','тест3','третье правило','Морозов',70000,'Руководители'

SELECT razdel,form,tema,pravilo,fio,sum(price) as summa, categ  FROM @t group by 
razdel, form, tema,pravilo,fio,categ order by razdel,tema, pravilo, form


Итог:

razdel form tema pravilo fio summa categ
А дневная тест1 первое правилоИванов 10000.00 Руководители
А дневная тест1 первое правило Петров 20000.00 Специалисты
А вечерняя тест2 второе правило Огурцов 40000.00 Руководители
А вечерняя тест2 второе правило Яблоков 60000.00 Руководители
А дневная тест3 первое правило Сидоров 30000.00 Руководители
А дневная тест3 первое правило Степанов 50000.00 Специалисты
А дневная тест3 третье правило Морозов 70000.00 Руководители


Т.е. делаем группировку по всем полям и считаем сумму по полю price. Но, в конечном итоге надо получить вот такой результат:

razdel form tema pravilo fio summa
А дневная тест1 первое правилоИванов; Петров 30000.00
А вечерняя тест2 второе правило Огурцов 40000.00
А вечерняя тест2 второе правило Яблоков 60000.00
А дневная тест3 первое правило Сидоров; Степанов 80000.00
А дневная тест3 третье правило Морозов 70000.00


Т.е. необходимо сделать сравнительны анализ полей: если раздел, форма, тема и правило одинаковые, а фамилии разные, и ОБЯЗАТЕЛЬНО категории разные (Руководители и Специалисты), то группируем эту строку, фамилии пишем через ; и price складываем

Как правильно и граммотно это сделать. Помогите пож-та. Заранее благодарна.
2 апр 14, 11:27    [15820106]     Ответить | Цитировать Сообщить модератору
 Re: Group by, Scalar function  [new]
Glory
Member

Откуда:
Сообщений: 104751
https://www.sql.ru/faq/faq_topic.aspx?fid=731
2 апр 14, 11:32    [15820139]     Ответить | Цитировать Сообщить модератору
 Re: Group by, Scalar function  [new]
Настенька
Member

Откуда: Норильск
Сообщений: 939
Не подходит, у меня SQL Server 2000.
2 апр 14, 11:37    [15820166]     Ответить | Цитировать Сообщить модератору
 Re: Group by, Scalar function  [new]
Glory
Member

Откуда:
Сообщений: 104751
Настенька
Не подходит, у меня SQL Server 2000.

Сразу нельзя было это сказать ?
https://www.sql.ru/faq/faq_topic.aspx?fid=130
2 апр 14, 11:39    [15820178]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить