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

Откуда:
Сообщений: 26
Привет. Всех с наступившим новым годом.
Будьте добры, подскажите. Делаю запрос данных из нескольких таблиц и нужно чтобы последние два поля вычислялись. Первое примерно по такой формуле: ПолеN=(ПолеА-полеБ)*полеВ. А второе суммировало бы значения полученные в ПолеN для которых выполняется одинаковое условие (что-то типа: СУММА(ПолеN) если ПолеГ=ПолеД).
Заранее спасибо всем откликнувшимся.
3 янв 10, 12:44    [8144648]     Ответить | Цитировать Сообщить модератору
 Re: Математические выражения в SQLserver2000  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
пишите процедуру, заполняющую временную таблицу в три прохода
3 янв 10, 13:09    [8144679]     Ответить | Цитировать Сообщить модератору
 Re: Математические выражения в SQLserver2000  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
Вы не привели скрипт. Остаётся догадываться,то конкретно нужно, поэтому вот, забирайте:
declare @c table(id int identity, fio varchar(50))
declare @o table(id int identity, c_id int, qty numeric(12,4))

insert @c select 'John Smith'
insert @c select 'Jack Lloyd'
insert @c select 'Mary Brown'
insert @c select 'Edward Scott'

insert @o select 1,1011.10
insert @o select 1,7111.26
insert @o select 1,5620.87
insert @o select 2,1234.56
insert @o select 2,5678.90
insert @o select 2,2345.67
insert @o select 3,5208.19
insert @o select 3,7410.36
insert @o select 3,1591.11
insert @o select 4,3357.67
insert @o select 4,4488.99
insert @o select 4,2266.77


select client_id,order_min,order_max,field_N
      ,total_for_big_delta=sum(case when order_max-order_min>5000 then field_N end)over()
from(
select client_id=o.c_id,order_min=min(qty),order_max=max(qty)
      ,field_N=cast(round(abs(max(qty) - min(qty))*100 / min(qty),4)as numeric(12,4))
from @o o join @c c on o.c_id=c.id
group by o.c_id
)t
(поле field_N = относительная величина отличий мин. и макс. значений qty для каждого клиента; поле total_for_big_delta = сумма по field_N, но только для тех его значений, которые находятся в строках, содержащих числа order_max-order_min>5000).
3 янв 10, 13:55    [8144744]     Ответить | Цитировать Сообщить модератору
 Re: Математические выражения в SQLserver2000  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
PS. Пардон, не увидел сразу, что надо для 2000. Тогда примерно так:
select t.client_id,t.order_min,t.order_max,t.field_N
      ,s.total_for_big_delta
from(
select client_id=o.c_id,order_min=min(qty),order_max=max(qty)
      ,field_N=cast(round(abs(max(qty) - min(qty))*100 / min(qty),4)as numeric(12,4))
from @o o join @c c on o.c_id=c.id
group by o.c_id
)t
left join
(
  select sum(field_N) total_for_big_delta
  from(
    select client_id=o.c_id,order_min=min(qty),order_max=max(qty)
          ,field_N=cast(round(abs(max(qty) - min(qty))*100 / min(qty),4)as numeric(12,4))
    from @o o join @c c on o.c_id=c.id
    group by o.c_id
    having max(qty)-min(qty)>5000
  )d
)s on 1=1
3 янв 10, 14:23    [8144776]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить