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

Откуда:
Сообщений: 54
Доброго времени суток,
есть задача, ломаю голову, даже не знаю возможно ли это средствами SQL.
Вроде бы все просто:
Есть табличка
10
20
30
Задачка: умножить максимальное число на 0,2, минимальное число на 0,8, все остальные на 0,5, все сложить и записать во второй столбец, то есть должно получится
10 | 24 (30 * 0,2 + 20 * 0,5 + 10 * 0,8)
20 | 24
30 | 24
Так вот вроде не хитро, но моих знаний SQL не достаточно.
Буду благодарен за любую информацию.
Большое спасибо.
10 май 12, 23:16    [12533281]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты по смежным строкам  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
declare @t table (v int);

insert into @t
values
 (10), (20), (30);
 
with cte1 as
(
 select
  case
   when v = max(v) over () then v * 0.2
   when v = min(v) over () then v * 0.8
   else v * 0.5
  end as x
 from
  @t
),
cte2 as
(
 select sum(x) as s from cte1
)
select
 t.v, cte2.s
from
 @t t cross join
 cte2;
10 май 12, 23:33    [12533337]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты по смежным строкам  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Gizmor,

declare @tab table (ID int, dd float)

insert into @tab (ID)
values(10),(20),(30)


select *
from @tab,

(
select 
sum(
ID * CASE WHEN ID =tmin THEN 0.8
		  WHEN ID =tmax THEN 0.2
		  ELSE 0.5 END 
) ff
from @tab, (select min(id) tmin, max(id) tmax from @tab) tt 
) ss
10 май 12, 23:46    [12533371]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты по смежным строкам  [new]
ALOTE
Member

Откуда:
Сообщений: 1748
Gizmor,Или так:
select val, val*
case when val IN (select MAX(val) from TBL) then 0.2
when val IN (select min(val) from TBL) then 0.8
else 0.5 end
from dbo.TBL

Хотя у invm код поэлегантней вышел
11 май 12, 00:29    [12533507]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты по смежным строкам  [new]
Gizmor
Member

Откуда:
Сообщений: 54
В MS SQL Management Studio заработал такой запрос

declare @tab table (ID int)

insert into @tab (ID)
values(10)
insert into @tab (ID)
values(20)
insert into @tab (ID)
values(30)

select *
from @tab,

(
select
sum(
ID * CASE WHEN ID =tmin THEN 0.8
WHEN ID =tmax THEN 0.2
ELSE 0.5 END
) ff
from @tab, (select min(id) tmin, max(id) tmax from @tab) tt
) ss

Спасибо большое ребята, очень помогли.
Ценю этот форум.
11 май 12, 08:49    [12533956]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты по смежным строкам  [new]
мимо
Guest
declare @t table (v int);

insert into @t
values
 (10), (20), (30);

select *
from @t 
	cross join (select MAX(v) * 0.2 + MIN(v) * 0.8 + (SUM(v) - (MAX(v) + MIN(v))) *0.5 from @t) as y(x)
11 май 12, 10:58    [12534638]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты по смежным строкам  [new]
smallserg
Member

Откуда:
Сообщений: 82
Gizmor,

В одно чтение таблицы :
 declare @t table  (f1 int)
insert into @t values (10)
insert into @t values (20)
insert into @t values (30)


select f1,sum(s) over() from
(select case when max(f1) over()=f1 then f1*0.2 else case when min(f1) over()=f1 
then f1*0.8 else f1*0.5 end end s, f1 
from @t) q
11 май 12, 11:24    [12534873]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить