我坚持使用 Oracle 我的查询,请帮助我。
这是我的桌子:
我想要的结果:
值 = 订单-数量
因此,基于相同 id 和相同 cust 的计算,它们是从之前的行中减去的,如果 id 和 cust 不相同,则它们通常会减去。
提前谢谢
我将假设您有另一列,它告诉您应从order
列中减去qty
的顺序,并将其称为datetime
列(但是您可以使用可用的任何列来提供行的确定性排序)。鉴于此,您可以使用分析SUM
函数计算value
:
SELECT id,
cust,
datetime,
order_total,
qty,
order_total
- SUM( COALESCE( qty, 0 ) )
OVER ( PARTITION BY id, cust, order_total ORDER BY datetime )
AS value
FROM table_name
其中,对于示例数据:
CREATE TABLE table_name ( id, cust, datetime, order_total, qty ) AS
SELECT '0001', 'abc', DATE '2021-01-01', 10000, 2000 FROM DUAL UNION ALL
SELECT '0001', 'abc', DATE '2021-01-02', 10000, 4000 FROM DUAL UNION ALL
SELECT '0001', 'abc', DATE '2021-01-03', 10000, 4000 FROM DUAL UNION ALL
SELECT '0002', 'bcd', DATE '2021-01-01', 5000, 2000 FROM DUAL UNION ALL
SELECT '0003', 'fgh', DATE '2021-01-01', 3000, 1000 FROM DUAL UNION ALL
SELECT '0004', 'ghj', DATE '2021-01-01', 5000, NULL FROM DUAL;
输出:
ID | CUST | DATETIME | ORDER_TOTAL | QTY | VALUE :--- | :--- | :-------- | ----------: | ---: | ----: 0001 | abc | 01-JAN-21 | 10000 | 2000 | 8000 0001 | abc | 02-JAN-21 | 10000 | 4000 | 4000 0001 | abc | 03-JAN-21 | 10000 | 4000 | 0 0002 | bcd | 01-JAN-21 | 5000 | 2000 | 3000 0003 | fgh | 01-JAN-21 | 3000 | 1000 | 2000 0004 | ghj | 01-JAN-21 | 5000 | null | 5000db<>fiddlehere
你可以试试的-使用lag()
select id,cust,orders,qty,
orders-qty-coalesce(lag(qty) over(partition by id,cust order by qty),0) as value
from tablename
输出:
id cust orders qty value
0001 abc 10000 2000 8000
0001 abc 10000 4000 4000
0002 bcd 5000 2000 3000
0003 fgh 3000 1000 2000
似乎您正在尝试按 id 进行分区,并按 id 和 qty 进行排序。您可以尝试
Select id, cust, order, qty, order-coalesce(sum(qty) over (partition by id order by id, qty),0) as value from myTable;
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(39条)