Oracle ORDER BY复杂查询问题

时间:2018-11-27 14:19:23

标签: sql oracle sql-order-by

我们有一个包含多个视图,分区,控制流等的复杂SQL查询。在最终输出中,我们希望能够返回同一行的“毛成本”和“行成本”。这两个列之前都已在基础视图中进行了分区,从而成功防止了重复。下面是一个示例:

PO Number    Gross Cost    Line #    Line Cost    Inv #    Inv Cost
      10          10000         1        10000        1        2000
      10                        1                     2        3000
      10                        1                     3        5000

相反,我们得到:

PO Number    Gross Cost    Line #    Line Cost    Inv #    Inv Cost
      10          10000         1                     1        2000
      10                        1                     2        3000
      10                        1        10000        3        5000

或者,使用ORDER BY table.gross_cost,table.line_cost,我们得到:

PO Number    Gross Cost    Line #    Line Cost    Inv #    Inv Cost
      10          10000         1                     1        2000
      10                        1         10000       2        3000
      10                        1                     3        5000

反之亦然,将ORDER BY切换到table.line_cost,table.gross_cost,我们得到:

PO Number    Gross Cost    Line #    Line Cost    Inv #    Inv Cost
      10                        1        10000        1        2000
      10          10000         1                     2        3000
      10                        1                     3        5000

希望这是有道理的。有什么方法可以通过ORDER BY子句实现第一个表示例,还是必须沿着GROUP BY路由走?我什至尝试通过CASE WHEN语句创建Order列,但这也行不通。

1 个答案:

答案 0 :(得分:1)

您似乎想要这样的东西:

select . . .,
       (case when inv = 1 then sum(gross) over (partition by po_number) end) as gross,
       (case when inv = 1 then sum(line) over (partition by po_number) end) as line
from t
order by po_number, inv;

这不是order by问题,因为您必须将数据移到第一张发票的行中。