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

Откуда:
Сообщений: 884
Добрый день.

Есть таблица:
work_date budjet ratio expected fact
08.04.2017 8.0 0.8 6.4 7.0
09.04.2017 8.0 0.8 6.4 6.4
10.04.2017 8.0 0.8 6.4 6.4
10.04.2017 8.0 0.8 6.4 7.0
10.04.2017 8.0 0.8 6.4 3.5
10.04.2017 8.0 0.8 6.4 3.0
11.04.2017 8.0 0.8 6.4 6.4
12.04.2017 8.0 0.8 6.4 7.4
13.04.2017 8.0 0.8 6.4 7.1


Надо посчитать и вывести в виде одной записи сумму по столбцам budjet, expected и fact,
но так, чтобы, если есть группа повторяющихся дат, то при вычислении суммы по полям budjet и expected брать только одно их значение (в течении одного дня они равны)
ratio не суммировать.

Должно быть так:
budjet ratio expected fact
48.0 0.8 38.4 54.2
17 май 17, 08:43    [20487807]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с подсчетом итогов...  [new]
uaggster
Member

Откуда:
Сообщений: 815
MAULER, нууу... "наивное" решение выглядит так:
set dateformat dmy;

Create table #dta (work_date date, budjet money, ratio money, expected money, fact money)

insert into #dta 
Values 				
('08.04.2017',	8.0,	0.8,	6.4,	7.0),
('09.04.2017',	8.0,	0.8,	6.4,	6.4),
('10.04.2017',	8.0,	0.8,	6.4,	6.4),
('10.04.2017',	8.0,	0.8,	6.4,	7.0),
('10.04.2017',	8.0,	0.8,	6.4,	3.5),
('10.04.2017',	8.0,	0.8,	6.4,	3.0),
('11.04.2017',	8.0,	0.8,	6.4,	6.4),
('12.04.2017',	8.0,	0.8,	6.4,	7.4),
('13.04.2017',	8.0,	0.8,	6.4,	7.1)

Select Sum(budjet),  max(ratio), Sum(expected), Sum(fact)
From (
Select 
	0 budjet, max(ratio) ratio, 0 expected, Sum(fact) fact 	From #dta
Union all
Select t.budjet, -10000, t.expected, 0 From
	(Select Distinct work_date, budjet, expected From #dta) t
	) t


Можно подумать, как это через оконные функции решить...
17 май 17, 09:34    [20488027]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с подсчетом итогов...  [new]
Добрый Э - Эх
Guest
MAULER,

сделай промежуточную группировку по дате с суммированием без дубликатов с последующей агрегацией в одно значение:

select sum(budjet) budjet, sum(expected) expected, sum(fact) fact, ratio
from ( select sum(distinct budjet) budjet, sum(distinct expected) expected, sum(fact) fact, max(ratio) as ratio
...
group by work_date) v
17 май 17, 09:35    [20488033]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с подсчетом итогов...  [new]
Zim90
Guest
drop table #dta
Create table #dta (work_date date, budjet money, ratio money, expected money, fact money)

insert into #dta 
Values 				
('20170408',	8.0,	0.8,	6.4,	7.0),
('20170409',	8.0,	0.8,	6.4,	6.4),
('20170410',	8.0,	0.8,	6.4,	6.4),
('20170410',	8.0,	0.8,	6.4,	7.0),
('20170410',	8.0,	0.8,	6.4,	3.5),
('20170410',	8.0,	0.8,	6.4,	3.0),
('20170411',	8.0,	0.8,	6.4,	6.4),
('20170412',	8.0,	0.8,	6.4,	7.4),
('20170413',	8.0,	0.8,	6.4,	7.1)

Select sum(budjet) as budjet, ratio, sum(expected) as expected, sum(fs) as fact 
	from ( 
		Select work_date, budjet, ratio, expected, sum(fact) fs
			from #dta
		group by work_date, budjet, ratio, expected) ps
group by ratio


Как-то так
17 май 17, 10:24    [20488330]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с подсчетом итогов...  [new]
MAULER
Member

Откуда:
Сообщений: 884
Всем огромное спасибо!
Разобрался.
18 май 17, 07:40    [20491582]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить