Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
kostazs Member Откуда: Москва Сообщений: 8 |
Доброго времени суток : ) Есть заполненная данными таблица работ по категориям.
Требуется сделать запрос результатом которого будет таблица с итогами по категориям причем желательно без столбца категорий если это вообще возможно. Желаемый результат примерно такой:
Заранее благодарен за советы
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 мар 16, 21:21 [18917483] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И чем вам не подходит полученный результат ? Форматировать вывод должно клиентское приложение |
||
11 мар 16, 09:17 [18918348] Ответить | Цитировать Сообщить модератору |
kostazs Member Откуда: Москва Сообщений: 8 |
Glory, В предложенном варианте я не пойму как вывести остальные столбцы таблицы. Про формат вывода клиентским приложением тоже не совсем понятно.. я работаю с программой "Учет клиентов" которая по указанному запросу может вставить полученную таблицу в файл word по шаблону. |
11 мар 16, 09:47 [18918461] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Т.е. такой вопрос, как в одном поле WorksPrice, например, будет сразу хранится и число и строка Подитог:, вас вообще не волнует ? |
||
11 мар 16, 09:56 [18918505] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ну так вот пусть разработчки программы "Учет клиентов" напишет модуль, который выведет вам рузультат запроса в нужном виде |
||
11 мар 16, 09:57 [18918515] Ответить | Цитировать Сообщить модератору |
kostazs Member Откуда: Москва Сообщений: 8 |
Glory, Я думаю я понял, то что вы пытаетесь донести) видимо ошибочно полагал что такое представление можно получить через запрос. |
11 мар 16, 13:08 [18919479] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
declare @t table (WorksNumber int, WorksType varchar(50), WorksName varchar(50), WorksQuantity int, WorksPrice money, WorksSum money) insert into @t (WorksNumber, WorksType, WorksName, WorksQuantity, WorksPrice, WorksSum) values (1, 'Категория1', 'Работа1', 1, 12, 12), (2, 'Категория1', 'Работа2', 1, 17852, 17852), (3, 'Категория2', 'Работа3', 23, 33659, 774157), (4, 'Категория2', 'Работа4', 12, 1995, 23940), (5, 'Категория2', 'Работа5', 1, 122, 122) select T.WorksType, T.WorksNumber, T.WorksName, T.WorksQuantity, T.WorksPrice, T.WorksSum from @t T ORDER BY T.WorksType, T.WorksName COMPUTE SUM(T.WorksSum) BY T.WorksType COMPUTE SUM(T.WorksSum) но всё равно потребуется в клиентском приложении красиво это показать |
11 мар 16, 14:10 [18919905] Ответить | Цитировать Сообщить модератору |
kostazs Member Откуда: Москва Сообщений: 8 |
Konst_One, Да, я понял, формат вывода уже за приложением. Спасибо |
11 мар 16, 14:20 [18919980] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
kostazs, Конечно, можно выбрать все записи, и всю обработку сделать на клиенте. Но зачем делать то, с чем сервер может легко справиться? Вы были на правильном пути. Сделаем следующий шаг: with A as ( select * from (values (1, 'Категория1', 'Работа1', 1, 12, 12), (2, 'Категория1', 'Работа2', 1, 17852, 17852), (3, 'Категория2', 'Работа3', 23, 33659, 774157), (4, 'Категория2', 'Работа4', 12, 1995, 23940), (5, 'Категория2', 'Работа5', 1, 122, 122) ) as T(WorksNumber, WorksType, WorksName, WorksQuantity, WorksPrice, WorksSum) ) --select * from A; , B as ( select WorksNumber,WorksType, WorksName, Max(WorksQuantity) wq, SUM(WorksPrice) wp, SUM(WorksSum) ws ,grouping(WorksType) b ,row_number() over (partition by WorksType order by grouping_id(WorksType, WorksName),grouping(WorksNumber) desc, WorksNumber) rn from A group by rollup(WorksType, WorksName, WorksNumber) having grouping(WorksNumber)=0 or grouping_id(WorksType, WorksName)>0 ) select WorksNumber ,case when rn=1 then WorksType else '' end as WorksType ,WorksName ,case when WorksName is not null then wq else null end as WorksQuantity ,wp ,ws from B order by b Результат: WorksNumber WorksType WorksName WorksQuantity wp ws COMPUTE в запросах уже не работает! |
11 мар 16, 15:46 [18920498] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
у нас пока 2008 r2 и compute прекрасно работает. всё равно это не дело сервера, для этого есть кубы MSAS BI, системы отчётности SSRS и тд и тп |
11 мар 16, 16:01 [18920592] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
Konst_One, а у нас уже не работает. Конечно, можно из-за пары простеньких отчетов установить кубы MSAS BI, системы отчётности SSRS и тд и тп... А можно и несложным запросом... |
11 мар 16, 16:08 [18920631] Ответить | Цитировать Сообщить модератору |
kostazs Member Откуда: Москва Сообщений: 8 |
Wlr-l, Спасибо, этот результат уже выглядит вполне съедобно. Начал разбираться, но вот непонятно.. а что если надо вывести больше разных полей ? Скажем добавить ед. изм. для количества или некую характеристику работы.. мне почему-то казалось, что в подитогах ничего сложного не должно быть и ничего не стоит просто вывести подитог по категориям для любого рода таблицы, оказалось все куда сложнее, чем я мог представить :D |
11 мар 16, 16:18 [18920682] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11561 |
там же CTE, добавляйте в A |
11 мар 16, 16:19 [18920692] Ответить | Цитировать Сообщить модератору |
Wlr-l Member Откуда: Сообщений: 523 |
kostazs, Когда-то мне тоже казалось все очень сложным, потом это проходит. Можно сделать группировку с подитогами и итогами, а потом соединить результат с другими столбцами исходной таблицы. Таблица А всего лишь имитирует ваши данные. |
11 мар 16, 16:28 [18920742] Ответить | Цитировать Сообщить модератору |
kostazs Member Откуда: Москва Сообщений: 8 |
Wlr-l, Я может конечно туплю, но уже второй день пытаюсь сделать группировку с подитогами и итогами, а потом соединить с другими столбцами, но у меня ничего не получается. Единственное, что смог добавить столбец один, но пришлось повозиться и я не уверен что сделал правильно
|
|
12 мар 16, 16:33 [18923629] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
|
12 мар 16, 18:07 [18923829] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |