Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как бы написать зпарос  [new]
Запрос№23
Guest
Есть запрос
with t as 
( select  300 d1, 100 d2, 300 d3, 0 d4, 804 d 
  from dual
 )
select ROUND( d1/(d1+d2+d3+d4)*d,0 ) d1,
       ROUND( d2/(d1+d2+d3+d4)*d,0 ) d2,
       ROUND( d3/(d1+d2+d3+d4)*d,0 ) d3,
       ROUND( d4/(d1+d2+d3+d4)*d,0 ) d4,
       d
        from t 
Нужно разницу между d - (d1+d2+d3+d4) разбросать пропорционально между этими колонками округлив до целого при этом d = (d1+d2+d3+d4). Можно ли это сделать в запросе?
17 июн 09, 14:20    [7310455]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
Elic
Member

Откуда:
Сообщений: 29976
with t as 
( select  300 d1, 100 d2, 300 d3, 0 d4, 804 d 
  from dual
 )
select d1, d2, d3, d - d1 - d2 - d3 as d4, d
  from 
  ( select ROUND( d1/(d1+d2+d3+d4)*d,0 ) d1,
           ROUND( d2/(d1+d2+d3+d4)*d,0 ) d2,
           ROUND( d3/(d1+d2+d3+d4)*d,0 ) d3,
           d
      from t
  )
;

           D1            D2            D3            D4             D
------------- ------------- ------------- ------------- -------------
          345           115           345            -1           804
17 июн 09, 14:35    [7310598]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
Запрос№23
Guest
Elic, только вот 0 и должен оставаться 0, корректировать в идеале нужно максимальное значение, не подходит.
17 июн 09, 15:11    [7310898]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
Elic
Member

Откуда:
Сообщений: 29976
Запрос№23
не подходит.

ТЗ будешь выдавать малюсенькими порциями?
Можно, но вид будет ужасающий :)
17 июн 09, 15:22    [7310981]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Запрос№23
Elic, только вот 0 и должен оставаться 0, корректировать в идеале нужно максимальное значение, не подходит.

1) фигли сразу не сказал
2) а довести рашпилем - религия не позволяет?

(в конец оборзели )
17 июн 09, 15:25    [7310997]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Elic
..Можно, но вид будет ужасающий :)

ну, почему же
with t as 
( select  300 d1, 100 d2, 300 d3, 0 d4, 804 d 
  from dual
 )
,t2 as (select t.* , d1+d2+d3+d4 d14 from t)
select round(d1*d/d14) d1n
      ,round(d2*d/d14) d2n
      ,round(d3*d/d14) d3n
      ,round(d4*d/d14) d4n
  from t2;
17 июн 09, 15:38    [7311084]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
Elic
Member

Откуда:
Сообщений: 29976
Запрос№23
корректировать в идеале нужно максимальное значение
Намёк:
        case when                        d1 >= all(d2,d3,d4) then 1 else 0 end as factor1,
        case when d2 > all(d1      ) and d2 >= all(   d3,d4) then 1 else 0 end as factor2,
        case when d3 > all(d1,d2   ) and d3 >= all(      d4) then 1 else 0 end as factor3,
        case when d4 > all(d1,d2,d3)                         then 1 else 0 end as factor4

orawish
ну, почему же
Совершенно очевидно, что ты не в теме :)
17 июн 09, 15:41    [7311115]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Elic
..
orawish
ну, почему же
Совершенно очевидно, что ты не в теме :)

ну, тогда реши задачку: разделить десять на три округлив до целого и, если надо корректируя
максимальное значение, чтобы в сумме было десять
17 июн 09, 15:50    [7311216]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
Elic
Member

Откуда:
Сообщений: 29976
orawish
ну, тогда реши задачку:
Я же намекнул :)
orawish
разделить десять на три округлив до целого и, если надо корректируя максимальное значение, чтобы в сумме было десять
Ты-таки понял, чего хочет автор :)
17 июн 09, 16:02    [7311321]     Ответить | Цитировать Сообщить модератору
 Re: Как бы написать зпарос  [new]
Запрос№23
Guest
Elic, идею понял, спасибо.
17 июн 09, 16:04    [7311338]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить