0

私は、同じ販売注文に対して複数行のデータを返す Oracle SQL クエリを持っています。これは、その注文がその全期間にわたって「保留」(確認してからリリースするため) に設定された場合です。

生成された各行では、通常、ホールドが適用されています。SO ライフ ラインの後半までホールドが適用されないこともあれば、ライフ ラインの 1 つのフェーズでホールドがまったく適用されないこともあります。

異なる日時に最大 4 つの保留を適用できます。H1、H2、H3、H4 の 4 つのホールド列が必要です。

販売注文行の値を独自の列に保持できるかどうかを知りたいですか? つまり、販売注文 (SO) の詳細の 1 つのレコード行ですが、レコードの最後に 4 つの保留列が表示されるため、3 ~ 4 行ではなく 1 行になります。

ホールドが適用されるたびに行が生成されるレコード出力の例:

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 ソリューションで問題ないと思います。次のクエリは、4 つの列をピボットします。

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 に答える