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

Откуда: Тольятти
Сообщений: 454
Добрый вечер!

Помогите составить запрос для отчёта. Дана таблица:

Товар Описание Продавец Кол Цена
----------------------------------------------
тов1 опис1 прод1 1 10
тов2 опис2 прод1 2 15
тов3 опис3 прод2 3 20
тов4 опис4 прод2 1 25
тов5 опис5 прод2 2 10
...

Нужно составить запрос, который бы вернул данные вот так:

тов1 опис1 1 10
тов2 опис2 2 15
прод1 3 25
тов3 опис3 3 20
тов4 опис4 1 25
тов5 опис5 2 10
прод2 6 55
...
всего 9 80

Есть идеи?
20 сен 18, 19:27    [21681320]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый отчёт  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
saszay,

читайте про GROUP by (cube и rollup)
20 сен 18, 19:35    [21681324]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый отчёт  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
saszay,

Процедура выдает данные для отчета. Внутри идет курсор с order by продавец, товар. При переключении продавца добавляете промежуточный итог количества. Столбик цена суммировать не нужно, сумма 10 и 15 = 25 ничего не даст. Нужно суммировать произведение от количества и цены, назвав его оборотом в шекелях.
В конце добавляете строку - все через unuon all или через таблицу в tempdb - с общими итогами.

Всё. Думаю, вполне кошерно.
20 сен 18, 19:37    [21681326]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый отчёт  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
WarAnt
saszay,

читайте про GROUP by (cube и rollup)

Ой-вей, зачем такие сложности, когда можно сделать вместо запроса простую процедуру, из которой получать нужные строки для отчета. Ему же не космический корабль делать, а так, плот из досок через пруд переплыть.
20 сен 18, 19:39    [21681328]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый отчёт  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 454
WarAnt,

Не совсем подходит, т.к. группировать нужно по продавцу, а товар и описание трогать не нужно.
А в GROUP нужно указывать все поля
20 сен 18, 19:40    [21681329]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый отчёт  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
declare @t table (Товар varchar(10), Описание varchar(10), Продавец varchar(10), Кол int, Цена int);

insert into @t
values
('тов1', 'опис1', 'прод1', 1, 10),
('тов2', 'опис2', 'прод1', 2, 15),
('тов3', 'опис3', 'прод2', 3, 20),
('тов4', 'опис4', 'прод2', 1, 25),
('тов5', 'опис5', 'прод2', 2, 10);

select
 Товар, Описание, Продавец, sum(Кол), sum(Цена)
from
 @t
group by
 grouping sets((Товар, Описание, Продавец), (Продавец), ());

Внешний вид выборки допилите сами. С помощью case и функци grouping.
20 сен 18, 20:08    [21681344]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый отчёт  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 454
invm,

Спасибо, то что нужно
21 сен 18, 04:27    [21681528]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить