私は次のクエリで働いている:集約するタイムスタンプ
SELECT contract,
source_ref1 AS "ORDER_NO",
part_no,
ifsapp.inventory_part_api.Get_description(contract, part_no) as "DESCRIPTION",
ifsapp.inventory_part_api.Get_unit_meas(contract, part_no) as "UNIT_MEAS",
date_applied,
(SELECT work_center_no FROM shop_order_operation where inventory_transaction_hist2.source_ref1 = shop_order_operation.order_no) AS "WORK_CENTER",
direction,
SUM(quantity) AS "QUANTITY",
(CASE
WHEN ((To_char(date_time_created, 'HH24:MI ') BETWEEN '05:45 ' AND '17:44') AND
date_applied = date_created) THEN 'SHIFT1'
WHEN (((To_char(date_time_created, 'HH24:MI') BETWEEN '17:45' AND '24:00') OR
(To_char(date_time_created, 'HH24:MI') BETWEEN '00:00' AND '05:44') AND
date_applied = date_created)) THEN 'SHIFT2'
ELSE 'MANUAL_ADJUST'
END) AS "SHIFT"
FROM ifsapp.INVENTORY_TRANSACTION_HIST2
WHERE part_no IN (select pc.part_no from ifsapp.HH_INV_PART_CHARS pc where pc.accounting_group = '400') AND
contract IN ('DE1', 'DE2') AND
transaction_code LIKE '%REC%' AND
direction IN ('+', '-') AND
source_ref_type = 'Shop Order' AND
To_char(date_applied, 'YYYY-MM-DD') BETWEEN '2017-01-01' AND '2017-12-26'
GROUP BY contract,source_ref1, part_no, ifsapp.inventory_part_api.Get_description(contract, part_no),
ifsapp.inventory_part_api.Get_unit_meas(contract, part_no), location_no, date_applied, direction,
date_time_created, date_created
ORDER BY date_applied
このクエリは、18292本のヒットを返します。
CASE文を削除し、GROUP BYセクションからDATE_TIME_CREATEDおよびDATE_CREATEDを削除すると、クエリは1356ヒットを返します。
私たちはCASEステートメントを使用して、製品の生産シフトを判断しています。 date_time_createdフィールドは基本的にタイムスタンプです。このテーブルでは、製品がどのようにシフトされたかを判断するために使用できる唯一のフィールドです。
しかし、それはまた、私たちがそれなしで10倍のヒットを得る結果となっています。
例としてORDER_NO 349321をとります。表示されているようにクエリを実行すると、私は61ヒットを取得します。 CASE文を削除し、GROUP BYセクションからDATE_TIME_CREATEDとDATE_CREATEDを削除すると、2回ヒットします。
私たちは2回以上のシフトを完了していません。したがって、私はORDER_NO 349321のすべてのトランザクションのタイムスタンプを知る必要はなく、すべてのタイムスタンプがShift 1またはShift 2にあるかどうかを知る必要はありません。 Shift 1またはShift 2で完了しました。
このケースステートメントから得た情報を集計する方法はありますか?私はMAXとAVGを私のcase文で使ってみましたが、同じ数の結果を返しています。
代表的なデータサンプルと目的の結果を提供します。 –
意図的に実行していない限り、 "SHIFT 2"計算でOR条件の周りに括弧が設定されていないように見えます。現在の方法では、ORが他の条件にリンクされていないため、「AND」条件は「AND」として扱われません。 '( \t( \t \t(TO_CHAR(date_time_created、 'HH24:MI')'17 BETWEEN 45' AND '24:00' )OR \t \t(TO_CHAR(date_time_created、 'HH24:MI')BETWEEN '00:00' AND '05:44' )AND \t date_applied = DATE_CREATED \t) ) ' は、この元の問題を修正しませんが、何かが今のに注意すること。 – ravioli