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

Откуда:
Сообщений: 62
Есть таблица
zone codeFrom codeTo qty
1 A B 4
1 B D 2
2 A B 3
Надо
zone code qty
1 A 4
1 B -4
1 B 2
1 D -2
2 A 3
2 B -3
В идеале сгруппировать:
1 A 4
1 B -2
1 D -2
2 A 3
2 B -3

С model ещё на "Вы", не могу понять ЧЯДНТ.
Вот этот запрос не работает (ORA-32611: incorrect use of MODEL CV operator):
select *
from ttable f
model
  dimension by (zone, ' ' code)
  measures (codeFrom, codeTo, qty, 0 res)
  rules (
    res[any,cv(codeFrom)] = cv(qty),
    res[any,cv(code_To)] = -cv(qty)
  )
15 янв 15, 21:33    [17124697]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Model  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
DmitryTyum,

Не надо лепить сюда модель.
select zone
      ,decode(dummy, 'X', codefrom, codeto) code
      ,sum(decode(dummy, 'X', qty, -qty)) qty
  from t, (select * from dual union select null from dual)
group by zone, decode(dummy, 'X', codefrom, codeto)
order by zone, decode(dummy, 'X', codefrom, codeto)
Если 11g+ - unpivot.
15 янв 15, 21:43    [17124723]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Model  [new]
DmitryTyum
Member

Откуда:
Сообщений: 62
Спасибо! Совсем про это не подумал.

select zone, code, sum(decode(prz,'CODEFROM',qty,-qty))
from ttable f
unpivot
(
  code for prz in (codefrom,codeto)
)
group by zone, code
15 янв 15, 21:57    [17124752]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Model  [new]
-2-
Member

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

cv в левой части смысла не имеет. это "условие" отбора индекса. так же, для разделения по zone напрашивается партиция, а не измерение.
15 янв 15, 22:46    [17124862]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Model  [new]
DmitryTyum
Member

Откуда:
Сообщений: 62
-2-,
пробую разными способами, разные ошибки. Через model решить пока не удалось...
15 янв 15, 22:56    [17124877]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Model  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
DmitryTyum
Через model решить пока не удалось...
Она не для этого предназначена.
Модель - кляуза для вычисления мер для заданных измерений, а у тебя задача из друх измерений (from, to) сделать одно.
Это не вычиление чего-то а фактически изменение структуры данных на которую ты хочешь натянуть модель.
И если pivot моделью реализуется довольно органично, поскольку представляет подсчет новых мер (второй пример).
То unpivot весьма смотрится криво и со множественными full scan (по крайней мере мне сходу не приходят идеи как их число можно уменьшить).
with t (zone, codeFrom, codeTo, qty) as
(select 1, 'A', 'B', 4 from dual
union all select 1, 'B', 'D', 2 from dual
union all select 2, 'A', 'B', 3 from dual)
select zone, code, qty
from t
model
return updated rows
dimension by (zone, codefrom code, codeto dummy)
measures (qty)
rules
(
  qty[for (zone, code, dummy) in (select zone, codefrom, 1 from t union select zone, codeto, 1 from t)] =
  nvl(sum(qty)[cv(zone),cv(code),any],0) - nvl(sum(qty)[cv(zone),any,cv(dummy)],0)
)
/

      ZONE C        QTY
---------- - ----------
         1 A          4
         1 B         -2
         1 D         -2
         2 A          3
         2 B         -3

with t (type, code, value) as
(select 1, 'A', 1 from dual
union all select 1, 'A', 2 from dual
union all select 1, 'B', 3 from dual
union all select 2, 'A', 4 from dual
union all select 2, 'D', 5 from dual
union all select 3, 'C', 6 from dual)
select type, val_a, val_b, val_c, val_d
from t
model
return updated rows
partition by (type)
dimension by (code, row_number() over (order by type, code, value) rn)
measures (value, 0 val_a, 0 val_b, 0 val_c, 0 val_d)
rules
(
  val_a[1, 1] = sum(value)['A',any],
  val_b[1, 1] = sum(value)['B',any],
  val_c[1, 1] = sum(value)['C',any],
  val_d[1, 1] = sum(value)['D',any]
)
/

      TYPE      VAL_A      VAL_B      VAL_C      VAL_D
---------- ---------- ---------- ---------- ----------
         1          3          3
         2          4                                5
         3                                6
23 янв 15, 16:53    [17161132]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом Model  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
dbms_photoshop
как их число можно уменьшить
Точнее как обойтись одним скаринованием (сделать на один скан меньше для получения дистинкта много ума не надо).
23 янв 15, 17:10    [17161292]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить