Начало » Использование СУБД » Microsoft SQL Server » вывод таблицы с пустыми полями (не знаю как сделать групировку)
вывод таблицы с пустыми полями [сообщение #1510] |
Mon, 30 January 2023 00:03 |
orozbay
Сообщений: 1 Зарегистрирован: January 2023
|
Junior Member |
|
|
Написать запрос, выводящий итоги по годам – по каждому году общий итог, суммарные итоги за месяц и суммарные итоги за каждый день. Если по какому-либо периоду нет данных – строки не выводить
выводить 104 запроса но не правильно расположены
select
year(action_date) as year,
ifnull(null, ' ') as month,
' ' as day,
sum(qty*price) as total
from actions
group by year
union
select
' ',
month(action_date),
' ',
sum(qty*price)
from actions
group by year(action_date), month(action_date)
union
select
' ',
' ',
day(action_date),
sum(qty*price)
from actions
group by year(action_date), month(action_date), day(action_date)
изображение как нужно вывести и изображение как у меня выводиться
|
|
|
|
|
Re: вывод таблицы с пустыми полями [сообщение #1523 является ответом на сообщение #1510] |
Wed, 01 February 2023 12:46 |
Добрый Э - Эх
Сообщений: 2 Зарегистрирован: February 2023
|
Junior Member |
|
|
orozbay писал(а) Mon, 30 January 2023 00:03Написать запрос, выводящий итоги по годам – по каждому году общий итог, суммарные итоги за месяц и суммарные итоги за каждый день. Если по какому-либо периоду нет данных – строки не выводить
выводить 104 запроса но не правильно расположены
В целом, задача - на знание расширенных функций группировки (rollup, cube, grouping sets).
В качестве небольшой иллюстрации (получение итогов за день, + итогов за месяцев, + итогов за год, + общее итого за весь период, охваченный исходным запросом):
-- Тестовый набор данных:
with
b$m_tst_tbl as
(
select cast('2023-01-01' as date) as dt, 10 as summ union all
select cast('2023-01-01' as date) as dt, 10 as summ union all
select cast('2023-01-02' as date) as dt, 10 as summ union all
select cast('2023-01-02' as date) as dt, 10 as summ union all
select cast('2023-02-01' as date) as dt, 10 as summ union all
select cast('2023-02-01' as date) as dt, 10 as summ union all
select cast('2023-02-02' as date) as dt, 10 as summ union all
select cast('2023-02-02' as date) as dt, 10 as summ union all
select cast('2023-02-02' as date) as dt, 10 as summ union all
select cast('2023-03-01' as date) as dt, 10 as summ union all
select cast('2023-03-02' as date) as dt, 10 as summ union all
select cast('2024-01-01' as date) as dt, 5 as summ union all
select cast('2024-01-01' as date) as dt, 5 as summ union all
select cast('2024-01-02' as date) as dt, 5 as summ union all
select cast('2024-01-02' as date) as dt, 5 as summ union all
select cast('2024-02-01' as date) as dt, 5 as summ union all
select cast('2024-02-01' as date) as dt, 5 as summ union all
select cast('2024-02-02' as date) as dt, 5 as summ union all
select cast('2024-02-02' as date) as dt, 5 as summ union all
select cast('2024-02-02' as date) as dt, 5 as summ union all
select cast('2024-03-01' as date) as dt, 5 as summ union all
select cast('2024-03-02' as date) as dt, 5 as summ
)
--
-- Основной запрос:
select case grouping_id(format(dt,'yyyy-MM-dd'), format(dt, 'yyyy-MM'), format(dt, 'yyyy'))
when 3 then 'За день: ' + format(dt,'yyyy-MM-dd')
when 5 then 'За месяц: '+ format(dt, 'yyyy-MM')
when 6 then 'ЗА ГОД: '+ format(dt, 'yyyy')
when 7 then 'ИТОГО: '
else 'х.з. :)'
end as [Период]
, sum(summ) as [Сумма]
, count(summ) as [Кол-во]
from b$m_tst_tbl
group by grouping sets(format(dt,'yyyy-MM-dd'), format(dt, 'yyyy-MM'), format(dt, 'yyyy'),())
order by coalesce(
format(dt,'yyyy-MM-dd')
, format(dt,'yyyy-MM')+'-33'
, format(dt,'yyyy')+'-13-00'
, '9999-99-99'
);
|
|
|
Re: вывод таблицы с пустыми полями [сообщение #1525 является ответом на сообщение #1522] |
Wed, 01 February 2023 17:28 |
BlackEric
Сообщений: 368 Зарегистрирован: June 2022
|
Senior Member |
|
|
Добрый Э - Эх писал(а) Wed, 01 February 2023 12:40BlackEric писал(а) Mon, 30 January 2023 14:14Это через временные таблицы делается. В одну сложил итоги за день, потом по ним посчитал итоги за месяц и в другую. Потом за год и все вывел.
Временные таблицы, конечно, инструмент хороший, но именно в этой задаче они не нужны
На самом деле это зависит от объема данных (времени выполнения запроса). Если все будет долго считаться, то лучше посчитанные итоги сохранять.
|
|
|
Переход к форуму:
Текущее время: Wed Dec 18 15:12:03 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00648 секунд
|