-1

Я взял одно из своих предыдущих упражнений и добавил к нему некоторую сложность. Вы можете найти свою исходную задачу в: 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 

Я получаю это:

enter image description here

Только теперь я хочу рассчитать sumProduct, разделенный rnc и date (столбец a). Как это сделать? Я пробовал с группой, но у меня возникают проблемы с неравным числом от выбора и количества элементов, которые я группирую.

Итак, я бы хотел переписать как-то вроде этого:

(sum(c * e) over (partition by a and partition by rnc)) as sumProduct 

ответ

1

я не уверен, почему вы используете временные таблицы, но вы можете разделить на несколько столбцов, просто включая их в partition by списке:

select *, 
     (case when b like 'xf%' 
      then sum(c * e) over (partition by a, rnd) 
     end) as sumProduct 
into #testing3 
from #testing2; 
+0

так может я просто написать: 'сумма (с * е) над (раздел на а, RNC) как sumProduct'? Спрашивая, что дело больше не требуется, так как теперь я фильтрую дату и rnc –

+0

@viorelmunteanu. , , Если вам не нужен этот случай, удалите его. –

Смежные вопросы