2012-07-31 44 views
0

的變動數。這是我一直在使用的查詢:如何獲取集合結果無果SQL

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包含在group by子句中,而我並不在這裏。謝謝!

+1

您可以顯示預期結果集?你可以在sqlFiddle中的任何地方顯示示例數據嗎? – 2012-07-31 17:09:38

+0

其中之一,停止使用不明確的格式,如'mm/dd/yyyy' ...應該是'> ='20120101'和<'20120720'' ... – 2012-07-31 17:11:44

回答

1

你就應該能夠到你的條件添加到LEFT JOIN我覺得,像這樣:

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 
+0

哇這樣一個簡單而優雅的解決方案。謝謝! – user1558927 2012-07-31 17:14:33