Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Применил rollup для вывода итогов, но зачем мне промежуточный итог, всего по одной записи? Как это обойти? Как быть с сортировкой?

Должно быть 2016 Май
2016 Июль
OREDER BY выводит общий итог наверх.
Format(Convert Date с ROLLUP не работает. Есть ещё варианты?

К сообщению приложен файл. Размер - 69Kb
15 дек 16, 14:57    [20007526]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Использовать функции grouping b и grouping_id
15 дек 16, 15:07    [20007593]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
group by grouping sets((DateDocsOtch2, Avtor), ())
15 дек 16, 15:10    [20007613]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
invm
group by grouping sets((DateDocsOtch2, Avtor), ())


Не хватает строчки с промежуточным итогом после Июля. Сортировка опять же по алфавиту, а не по месяцам и году.

К сообщению приложен файл. Размер - 62Kb
15 дек 16, 15:16    [20007656]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
by rollup сокращенная запись grouping sets.

grouping sets само по себе не решит проблему сортировки.
15 дек 16, 15:19    [20007689]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Ни внутри rollup, ни в grouping sets сортировка не получается. Выдает ошибку

К сообщению приложен файл. Размер - 109Kb
15 дек 16, 15:22    [20007713]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Повторю еще раз:

Нужно использовать функции grouping и(или) grouping_id.
15 дек 16, 15:26    [20007749]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Wlr-l
Повторю еще раз:

Нужно использовать функции grouping и(или) grouping_id.


Нет особых отличий от rollup из первого поста

К сообщению приложен файл. Размер - 91Kb
15 дек 16, 15:39    [20007848]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
А если подумать или прочитать до конца о rollup, то можно узнать, что эти функции можно использовать и на других этапах выполнения запроса.

Если вам нужна, например, сортировка, то эти функции нужно использовать после order by.
15 дек 16, 15:47    [20007917]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
o-o
Guest
репортингом отчеты делать,
а не вьюхой (с сортировкой )
в 2 клика такое выведет с какими хотите итогами и такой же сортировкой
15 дек 16, 15:54    [20007963]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
o-o,

Чтобы получить такие данные, совсем необязательно устанавливать систему отчетности.

Да и сортировка малых объемов не так уже и страшна!
15 дек 16, 15:58    [20008001]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Забыл, сортировка в view, конечно, бесполезна.
15 дек 16, 16:00    [20008009]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
o-o
Guest
Wlr-l
o-o,

Чтобы получить такие данные, совсем необязательно устанавливать систему отчетности.

Да и сортировка малых объемов не так уже и страшна!

Я где-то пишу про страхи и объемы?
Я вижу, что он минимум час как не может получить то, что в репотринге за минуту получит
15 дек 16, 16:08    [20008044]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
ypmail
зачем мне промежуточный итог, всего по одной записи? Как это обойти? Как быть с сортировкой?
declare @t table (d varchar(10), n varchar(30), v int);

insert into @t
values
 ('201606', 'Иванов', 1), ('201606', 'Петров', 1),
 ('201607', 'Иванов', 1),
 ('201608', 'Иванов', 1), ('201608', 'Петров', 1), ('201608', 'Сидоров', 1);

select
 d, n, sum(v),
 grouping(d), grouping(n)
from
 @t
group by
 rollup (d, n)
having
 not (count(*) = 1 and grouping(d) = 0 and grouping(n) = 1)
order by
 grouping(d), d, grouping(n), n;
15 дек 16, 17:03    [20008362]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Мне это нужно в запросе. Объясню для чего. Есть программная оболочка, которая работает с базой SQL. Эта оболочка формирует отчёты в html, но есть в ней один минус: при формировании сводного отчёта, когда надо вывести несколько таблиц с группировками и итогами в один html файл она применяет настройки (опять же в самой оболочке есть настройки для отчёта: группировка, итоги), так вот она применяет эти настройки только к одной самой первой таблице. Остальные выводятся как есть, без группировок и итогов.

Мне нужно в запросе оформить таблицу как надо, а программа её уже отправит в html как я в запросе приготовлю.
16 дек 16, 11:44    [20010764]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
ypmail,

логично было бы использовать Reporting Services для такого отчета, а там сохраняйте хоть в HTML, хоть в PDF.
16 дек 16, 13:22    [20011614]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Владислав Колосов
ypmail,
логично было бы использовать Reporting Services для такого отчета, а там сохраняйте хоть в HTML, хоть в PDF.


Мне из программы нужно формировать отчёт. Простой пользователь понятия не имеет что такое Reporting Services и как им пользоваться. Ему нужно из программы тыкнуть на отчёт и отчет сам сформировался. А программа увы, писал выше. Вот пытаюсь эту недоработку программы в выражении SQL обойти...
16 дек 16, 13:29    [20011687]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Wlr-l
А если подумать или прочитать до конца о rollup, то можно узнать, что эти функции можно использовать и на других этапах выполнения запроса.
Если вам нужна, например, сортировка, то эти функции нужно использовать после order by.


Что-то не нашел ни одного примера. rollup идет с group by, а order by перед group by не вставишь.
16 дек 16, 13:44    [20011818]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
o-o
Guest
автор
Что-то не нашел ни одного примера.


invm
ypmail
зачем мне промежуточный итог, всего по одной записи? Как это обойти? Как быть с сортировкой?
declare @t table (d varchar(10), n varchar(30), v int);

insert into @t
values
 ('201606', 'Иванов', 1), ('201606', 'Петров', 1),
 ('201607', 'Иванов', 1),
 ('201608', 'Иванов', 1), ('201608', 'Петров', 1), ('201608', 'Сидоров', 1);

select
 d, n, sum(v),
 grouping(d), grouping(n)
from
 @t
group by
 rollup (d, n)
having
 not (count(*) = 1 and grouping(d) = 0 and grouping(n) = 1)
order by
 grouping(d), d, grouping(n), n;
16 дек 16, 14:08    [20012018]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
o-o,

У меня появятся 2 ненужных столбца grouping(d), grouping(n). Мне же этот запрос должен вывести красивую таблицу для отправки в отчет без вспомогательных и прочих столбцов.
16 дек 16, 14:22    [20012140]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
ypmail,

Так уберите их из select.
16 дек 16, 14:30    [20012203]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
У человека есть Жигули, он спрашивает как проехать, а ему уже два раза предложили купить Камаз, так как на нем легче ездить по нашим дорогам...

Кстати, а как в SSRS реализовать "зачем мне промежуточный итог, всего по одной записи". Здесь одной мышкой с парой кликов не обойтись.
16 дек 16, 14:34    [20012254]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Wlr-l
ypmail,
Так уберите их из select.


Да, загнался уже. Лишняя строчка ушла, но с сортировкой по-прежнему не удается ничего придумать.
16 дек 16, 14:53    [20012455]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
invm дал решение. Чуть-чуть изменить:

declare @t table (d varchar(10), dd varchar(30), n varchar(30), v int);

insert into @t
values
 ('201606', '2016 июнь', 'Иванов', 1), ('201606', '2016 июнь', 'Петров', 1),
 ('201607', '2016 июль', 'Иванов', 1),
 ('201608', '2016 август', 'Иванов', 1), ('201608', '2016 август', 'Петров', 1), ('201608', '2016 август', 'Сидоров', 1);

select  case when grouping(d)=1 then null else max(dd) end dd,   n--, sum(v), grouping(d), grouping(n)
from @t
group by rollup (d, n)
having not (count(*) = 1 and grouping(d) = 0 and grouping(n) = 1)
order by grouping(d), d, grouping(n), n;

Результат:

2016 июнь	Иванов	1
2016 июнь Петров 1
2016 июнь NULL 2
2016 июль Иванов 1
2016 август Иванов 1
2016 август Петров 1
2016 август Сидоров 1
2016 август NULL 3
NULL NULL 6
16 дек 16, 15:40    [20012797]     Ответить | Цитировать Сообщить модератору
 Re: Итоги таблицы общие и промежуточные  [new]
ypmail
Member

Откуда:
Сообщений: 331
Всем спасибо за помощь! Получилось!
Ещё добавил поле в select, пришлось его также включать в group by rollup, а потом в having затирать ненужные строки по комбинациям 0,0,1 и 0,1,1 (глядя на строки и колонки grdat, gravt,grper).

Если мне нужно включить в запрос ещё несколько колонок, то потом тоже придется включать их в group by rollup и разбираться в матрице с нулями и единицами, чтобы правильно написать having?
16 дек 16, 16:03    [20012943]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить