我们有一个包含多个视图,分区,控制流等的复杂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列,但这也行不通。
答案 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
问题,因为您必须将数据移到第一张发票的行中。