Я взял одно из своих предыдущих упражнений и добавил к нему некоторую сложность. Вы можете найти свою исходную задачу в: select case with "over partition by"За раздел на 2 столбца SQL Server
сценарий: (с помощью SQL Server 2012)
create table #testing (b varchar (20), a date, c int, e int)
insert into #testing (b,a,c,e)
values
('xf_1m','2015-03-02','1','3'),
('xf_3m','2015-03-02','2','5'),
('xf_5y','2015-03-02','4','2'),
('xf_10y','2015-03-02','3','6'),
('ay_10y','2015-03-02','7','2'),
('adfe_1m','2015-03-02','2','5'),
('xm_1m','2013-02-01','7','2'),
('xf_15y','2013-02-01','1','8'),
('xf_20y','2013-02-01','10','1')
После использования этого запроса:
select
b, a, c, e,
substring (b, 1, CHARINDEX ('_', b) - 1) rnc,
substring(b, CHARINDEX('_', b) + 1, LEN (b)) rnb,
case
when b like 'xf%' then --
(sum(c * e) over (partition by a)) end as sumProduct
into #testing2
from #testing
select
*,
case
when b like 'xf%' then --
(sum(c * e) over (partition by a)) end as sumProduct
into #testing3
from #testing2
select *
from #testing3
Я получаю это:
Только теперь я хочу рассчитать sumProduct, разделенный rnc и date (столбец a). Как это сделать? Я пробовал с группой, но у меня возникают проблемы с неравным числом от выбора и количества элементов, которые я группирую.
Итак, я бы хотел переписать как-то вроде этого:
(sum(c * e) over (partition by a and partition by rnc)) as sumProduct
так может я просто написать: 'сумма (с * е) над (раздел на а, RNC) как sumProduct'? Спрашивая, что дело больше не требуется, так как теперь я фильтрую дату и rnc –
@viorelmunteanu. , , Если вам не нужен этот случай, удалите его. –