Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
MAULER Member Откуда: Сообщений: 917 |
Добрый день. Есть таблица:
Надо посчитать и вывести в виде одной записи сумму по столбцам budjet, expected и fact, но так, чтобы, если есть группа повторяющихся дат, то при вычислении суммы по полям budjet и expected брать только одно их значение (в течении одного дня они равны) ratio не суммировать. Должно быть так:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 май 17, 08:43 [20487807] Ответить | Цитировать Сообщить модератору |
uaggster Member Откуда: Сообщений: 972 |
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] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
MAULER Member Откуда: Сообщений: 917 |
Всем огромное спасибо! Разобрался. |
18 май 17, 07:40 [20491582] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |