оператор case в select при создании подзапроса - PullRequest
0 голосов
/ 21 сентября 2019

Отсутствует ошибка ключевого слова в строке 4

Я использую oracle sql

SELECT invoice_num, invoice_item, sales_order_num, sales_order_item, NET_aMT, list_amt, COST_PERCENT,
case when product_type_code='PTO' 
THEN 0
ELSE INV_AMT COST_PERCENT over (PARTITION BY sales_order_num, sales_order_item,invoice_num)
END
ALLOC_NET
FROM(
select invoice_num, invoice_item, sales_order_num, sales_order_item, NET_aMT, list_amt, 
case when p.product_type_code IN ('PTO','ATO') 
then sum(NET_AMT) over (PARTITION BY sales_order_num, sales_order_item, invoice_num) 
else 0
end
as INV_AMT,
cost_amt,
case when p.product_type_code = 'ATO' 
then SUM(cost_amt) OVER (PARTITION BY sales_order_num, sales_order_item, invoice_num) 
else 0 
as pto_cost,
case when p.product_type_code = 'ATO' 
then (cost_amt/SUM(cost_amt) OVER (PARTITION BY sales_order_num, sales_order_item, invoice_num))
else 0 
end as cost_percent,
p.product_type_code
from edw.w_sales_invoice_line_f f, edw.w_product_d p
where f.sales_order_num = '11574425' and f.product_wid = p.row_wid and sales_order_item IN ( '5','1','2','3')
AND invoice_item!=1
);

Я получаю:

ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:
Error at Line: 4 Column:

Как я могуисправить это?

1 Ответ

0 голосов
/ 21 сентября 2019

Это CASE кажется недействительным:

case when product_type_code='PTO' THEN 0 
     ELSE INV_AMT*COST_PERCENT over (PARTITION BY sales_order_num, sales_order_item,invoice_num) 
END ALLOC_NET

Похоже, вы думали, что COST_PERCENT - аналитическая функция, но - документация не совпадает (т.е. я никогда не слышал об этом, Google не возвращаетчто-нибудь).Не могли бы вы объяснить, что это такое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...