0

我有一个 Oracle SQL 查询,当在订单的整个生命周期中都放置了“保留”(供审阅然后发布)时,该查询返回同一销售订单的几行数据。

在生成的每一行中,通常都应用了保持;有时,直到 SO 生命线的后期才应用保留,或者在其生命线的一个阶段根本不应用。

在不同的日期和时间最多可以应用 4 个保留。我想要四个保持列:H1、H2、H3、H4。

我想知道是否可以将销售订单行中的这些值保留在他们自己的列中?意思是,销售订单 (SO) 详细信息的记录行,但在记录的末尾显示四个 Hold 列 - 所以我有一行而不是 3-4 行。

示例记录输出,每次应用保持时都会生成一行:

SO1 - several SO detail fields - "SCH" hold applied - date applied - date released
SO1 - several SO detail fields - no hold applied yet a user has generated an action against the SO so a record gets written
SO1 - several SO detail fields - "PLN" hold applied - date applied - date released
SO1 - several SO detail fields - "DWN" hold applied - date applied - date released

最终结果:

SO1 - SO detail fields - Hold1 (=SCH) - Hold2 (= null) - Hold3 (= PLN) - Hold4 (= DWN)

我不知道如何用 PL/SQL 编写(还)所以我想知道这是否可以在 Crystal Reports 中完成?任何帮助表示赞赏。请让我知道还有什么可以提供更好的清晰度。

4

1 回答 1

0

这被标记为“sql”,所以我假设 SQL 解决方案是可以的。以下查询以四列为中心:

select SalesOrderId,
       max(case when seqnum = 1 then hold end) as hold1,
       max(case when seqnum = 2 then hold end) as hold2,
       max(case when seqnum = 3 then hold end) as hold3,
       max(case when seqnum = 4 then hold end) as hold4
from (select s.*, row_number() over (partition by SalesOrderId order by ReleaseDate) as seqnum
      from (<your query>) s
     ) s
group by SalesOrderId;

我猜测字段名称是什么,但您需要的结构与此类似。

于 2013-09-06T03:09:35.310 回答