0

これは私が使用しているクエリです:

select serial_number, DAQ.qtag_no, min(TOH.start_time), order_number, DAQ.creation_time, qtag_status, ar_code, pro_foundin, pro_category, root_cause, remark from UNIT U 
left JOIN WORK_ORDER WO ON WO.order_key = U.order_key
left join TRACKED_OBJECT_HISTORY TOH on TOH.tobj_key = U.unit_key
WHERE U.creation_time > '01/01/2012' AND U.creation_time < '07/20/2012'
AND order_number NOT LIKE '[R]%' 
group by serial_number, qtag_no, order_number, DAQ.creation_time, qtag_status, ar_code, pro_foundin, pro_category, root_cause, remark
order by serial_number

現在、3280件の結果が得られています。この設定では、「アセンブリ」、「診断」などのさまざまなステーションがあります。min(TOH.start_time)列の目標は、アセンブリステーションで最初の開始時刻を返すことですが、現在は最初の開始時刻を返しています。任意の駅での開始時刻。ただし、ステーションを指定するために別のWHERE句を追加すると(TOH.op_name ='Assembly')、結果の数が制限されます(2700まで)。3280の結果を保持したいのですが、代わりに、アセンブリステーションにスキャンインされていないユニットの場合、min(TOH.start_time)列にNULLを返します。case関数を使用してみましたが、グループ化句にTOH.op_nameを含める必要がありますが、これは探していません。ありがとう!

4

1 に答える 1

1

次のように、左側の結合に条件を追加できるはずです。

select  serial_number, 
    DAQ.qtag_no, 
    min(TOH.start_time), 
    order_number, 
    DAQ.creation_time, 
    qtag_status, 
    ar_code, 
    pro_foundin, 
    pro_category, 
    root_cause, 
    remark 
from UNIT U 
left 
JOIN    WORK_ORDER WO 
    ON  WO.order_key = U.order_key
left 
join    TRACKED_OBJECT_HISTORY TOH 
    on  TOH.tobj_key = U.unit_key
    and TOH.op_name = 'Assembly'
WHERE   U.creation_time > '01/01/2012' AND U.creation_time < '07/20/2012'
AND     order_number NOT LIKE '[R]%' 
group by serial_number, qtag_no, order_number, DAQ.creation_time, qtag_status, ar_code, pro_foundin, pro_category, root_cause, remark
order by serial_number
于 2012-07-31T17:07:48.697 に答える