【发布时间】:2018-01-18 07:35:51
【问题描述】:
我的桌子:
HEAD_ID LINE ID ADJUST_ID LIST_PRICE DISCOUNT
01 01 01 200 15
01 01 02 200 0
01 01 03 200 10
01 02 01 300 16
01 02 02 300 0
02 01 01 300 15
02 01 02 300 0
02 01 03 300 10
02 02 01 100 16
02 02 02 100 0
我需要按 HEAD_ID 和 LINE_ID 对 LIST_PRICE 组进行总和,但不包括 ADJUST_ID。 TOTAL_LIST_PRICE 应该是 head id 中所有 line ID 的总和,但不重复。例如:
For the TOTAL_LIST_PRICE for HEAD_ID 01 is (HEAD_ID 01 LINE_ID 01) + (HEAD_ID 01 LINE_ID 02) = 200 + 300 = 500
For the TOTAL_LIST_PRICE for HEAD_ID 02 is (HEAD_ID 02 LINE_ID 01) + (HEAD_ID 02 LINE_ID 02) = 300 + 105 = 405
预期的结果是这样的:
HEAD_ID LINE ID ADJUST_ID LIST_PRICE DISCOUNT TOTAL_LIST_PRICE
01 01 01 200 15 500
01 01 02 200 0 500
01 01 03 200 10 500
01 02 01 300 16 500
01 02 02 300 0 500
02 01 01 300 15 405
02 01 02 300 0 405
02 01 03 300 10 405
02 02 01 105 16 405
02 02 02 105 0 405
我的查询是这样的 -
SELECT head_id, line_id, adjust_id, list_price, discount,
SUM(LIST_PRICE) OVER (PARTITION BY head_id, line_id) TOTAL_LIST_PRICE
FROM TABLE;
输出 -
HEAD_ID LINE ID ADJUST_ID LIST_PRICE DISCOUNT TOTAL_LIST_PRICE
01 01 01 200 15 600
01 01 02 200 0 600
01 01 03 200 10 600
01 02 01 300 16 600
01 02 02 300 0 600
02 01 01 300 15 900
02 01 02 300 0 900
02 01 03 300 10 900
02 02 01 105 16 210
02 02 02 105 0 210
我在 SUM OVER PARTITION 中遗漏了什么?还是我为此使用了错误的方法?
谢谢
【问题讨论】:
-
你预期的结果是错误的。
200+200+200是600不是500如果我按line_id和head_id分组。并且查询是正确的。有没有你想返回的具体结果 -
嗨,XING,我预计 500 作为预期结果。我需要的是从 HEAD_ID 01 获取 LINE_ID 01 和 02 的总和。所以 200 (HEAD_ID 01, LINE_ID 01) + 300 (HEAD_ID 01, LINE_ID 02)。 HEAD_ID 02 也是如此。TOTAL_LIST_PRICE 将为 405,因为 300 (HEAD_ID 02, LINE_ID 01) + 105 (HEAD_ID 02, LINE_ID 02)。
标签: sql oracle window-functions