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

Откуда:
Сообщений: 21
Добрый день. Нужно в new_value получить сумму 8. Как в данном случае сложить только по одному число каждого типа?
В value всегда одинаковые значения для одинаковых type. Может как то сюда можно включить ф-ию MIN()? Без группировки.

declare @table table(type int,new_type int,value int)
insert @table
VALUES(1,1,5)
insert @table
VALUES(1,1,5)
insert @table
VALUES(2,1,3)
insert @table
VALUES(2,1,3)

select t.*, SUM(value) OVER (Partition by new_type) as new_value
from @table t


type        new_type    value       new_value
----------- ----------- ----------- -----------
1           1           5           16
1           1           5           16
2           1           3           16
2           1           3           16
21 ноя 12, 10:46    [13505297]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по хитрому select, partition, over  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
select t.*, SUM(value) OVER (Partition by new_type) / count(*) OVER (Partition by new_type, value) as new_value
from @table t
21 ноя 12, 10:52    [13505343]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по хитрому select, partition, over  [new]
perplexed1
Member

Откуда:
Сообщений: 21
invm, Спасибо, но не работает, если разное количество разных типов:

declare @table table(type int,new_type int,value int)
insert @table
VALUES(1,1,5)
insert @table
VALUES(1,1,5)
insert @table
VALUES(2,1,3)
insert @table
VALUES(2,1,3)
insert @table
VALUES(2,1,3)

select t.*, SUM(value) OVER (Partition by new_type) / count(*) OVER (Partition by new_type, value) as new_value
from @table t


type        new_type    value       new_value
----------- ----------- ----------- -----------
2           1           3           6
2           1           3           6
2           1           3           6
1           1           5           9
1           1           5           9
21 ноя 12, 11:05    [13505461]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по хитрому select, partition, over  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
perplexed1
invm, Спасибо, но не работает, если разное количество разных типов
Ну так надо все условия задачи озвучивать.
with cte as
(
 select
  *, row_number() over (partition by new_type, value order by value) as rn
 from
  @table
)
select
 type, new_type, value, sum(case when rn = 1 then value end) over (partition by new_type)
from
 cte;
21 ноя 12, 11:13    [13505541]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по хитрому select, partition, over  [new]
_djХомяГ
Guest
---т к в value всегда одинаковые значения для одинаковых type
select *,(select sum(distinct value) from @table)
 from @table
21 ноя 12, 11:14    [13505557]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по хитрому select, partition, over  [new]
_djХомяГ
Guest
---так лучше
select s.*,val from @table s cross join (select sum(distinct value) val  from @table) t
21 ноя 12, 11:18    [13505587]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить