簡體   English   中英

如何使用右表上的1行(Top 1)進行多個具有多個ID的左連接

[英]How to do multiple Left join with multiple ids with just 1 row (Top 1) on the right table

我在多個ID上做多個左連接。 我試圖只匹配右表中的1個結果,但不確定當連接在多個ID上時如何編寫嵌套選擇。

最后2個左連接返回超過1行,即使連接多個ID(預期)但是我只對匹配右表上結果的ONE(Top 1)感興趣。
我已經查看了有關左連接的其他帖子,但沒有一個包括加入多個ID。

基本上我正在嘗試從操作表(左表)中獲取操作列表。 每個操作都有一個標識符,其中包含Type,Base ID,Lot ID,Split ID,Sub ID和Sequence No,這些標識符可以實現獨特的操作。 提到的所有表都列出了這些列。
但是,“需求”表“R”對於每個唯一操作可能有多於一行,我只需要1個要求。 “Operation_Audit”表“OA”的情況也是如此。

我只為選擇下的每個表放了1列,以方便閱讀。

Select   
  O.SETUP_HRS As [Setup Time], O.RUN_HRS As [Run Time],  
  OS.RESOURCE_ID As [Shop Resource],  
  WO.PART_ID As [Part ID / Assy],   
  P.DESCRIPTION As [Part / Assy Description],  
  WOV.DESCRIPTION As Description,
  R.CLOSE_DATE As [Req Issue Date],  
  OA.RESULT_DETAIL As Reason  

From OPERATION As O  
  Inner Join OPERATION_SCHED OS On  
    O.WORKORDER_TYPE = OS.WORKORDER_TYPE And
    O.WORKORDER_BASE_ID = OS.WORKORDER_BASE_ID And 
    O.WORKORDER_LOT_ID = OS.WORKORDER_LOT_ID And 
    O.WORKORDER_SPLIT_ID = OS.WORKORDER_SPLIT_ID And
    O.WORKORDER_SUB_ID = OS.WORKORDER_SUB_ID And 
    O.SEQUENCE_NO = OS.SEQUENCE_NO
  Inner Join WORK_ORDER WO On 
    O.WORKORDER_TYPE = WO.[TYPE] And
    O.WORKORDER_BASE_ID = WO.BASE_ID And 
    O.WORKORDER_LOT_ID = WO.LOT_ID And
    O.WORKORDER_SPLIT_ID = WO.SPLIT_ID
  Left Outer Join PART P On 
    P.ID = WO.PART_ID
  Inner Join CR_WO_PART WOV On 
    O.WORKORDER_TYPE = WOV.[TYPE] And
    O.WORKORDER_BASE_ID = WOV.BASE_ID And 
    O.WORKORDER_LOT_ID = WOV.LOT_ID And
    O.WORKORDER_SPLIT_ID = WOV.SPLIT_ID And 
    O.WORKORDER_SUB_ID = WOV.SUB_ID
  Left Outer Join REQUIREMENT R On 
    O.WORKORDER_TYPE = R.WORKORDER_TYPE And 
    O.WORKORDER_BASE_ID = R.WORKORDER_BASE_ID And 
    O.WORKORDER_LOT_ID = R.WORKORDER_LOT_ID And 
    O.WORKORDER_SPLIT_ID = R.WORKORDER_SPLIT_ID And 
    O.SEQUENCE_NO = R.OPERATION_SEQ_NO And 
    O.WORKORDER_SUB_ID = R.WORKORDER_SUB_ID
  Left Outer Join OPERATION_AUDIT OA On 
    O.WORKORDER_TYPE = OA.WORKORDER_TYPE And 
    O.WORKORDER_BASE_ID = OA.WORKORDER_BASE_ID And 
    O.WORKORDER_LOT_ID = OA.WORKORDER_LOT_ID And 
    O.WORKORDER_SPLIT_ID = OA.WORKORDER_SPLIT_ID And 
    O.WORKORDER_SUB_ID = OA.WORKORDER_SUB_ID And 
    O.SEQUENCE_NO = OA.SEQUENCE_NO And
    OA.RESULT = 'M'

Where 
  O.COMPLETED_QTY <= O.CALC_END_QTY And 
  WO.SUB_ID = '0' And
  O.WORKORDER_TYPE = 'W' And 
  OS.SCHEDULE_ID = 'STANDARD' And
  FilterCriteria = @FilterCriteria  

我將創建查詢,從而為表R和OA中的每個唯一操作返回所需的一行。 然后將這些查詢設置為公用表表達式(CTE)。 然后執行上面的原始查詢(左邊足夠好,不需要外部)但是加入單個記錄CTE而不是R和OA。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM