2017-07-07 86 views
0

我有下面的SQL查詢:聯盟相結合的結果與重複的行

SELECT qryRef_Routes_tbl.Ref_Route_Name, qryRef_Routes_tbl.Ref_Route_ID, tblFMS_Data.FM_FinYear, tblFMS_Data.FM_Period, 
tblPeriod_Lookup.PL_ID, Sum(IIf([FM_TrustNo]=0 And [FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS Success, 
Sum(IIf([FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS CountPrevent 
FROM 
(
( 
    (tblFMS_Data INNER JOIN qryRef_Routes_tbl ON tblFMS_Data.FM_Route = qryRef_Routes_tbl.Ref_Route_ID) 
    INNER JOIN tblRCM_II_Assets ON tblFMS_Data.FM_EllipseNo = tblRCM_II_Assets.RI_Number 
) 
    INNER JOIN tblPeriod_Lookup ON tblFMS_Data.FM_FinYear = tblPeriod_Lookup.PL_FinYear 
    AND tblFMS_Data.FM_Period = tblPeriod_Lookup.PL_PeriodNo 
) 
INNER JOIN qryRef_Detectable_Failure_Valid_Combo ON tblFMS_Data.FM_Component2 = qryRef_Detectable_Failure_Valid_Combo.Ref_Fault_Comp2_ID 
AND tblFMS_Data.FM_Component = qryRef_Detectable_Failure_Valid_Combo.Ref_Fault_Comp1_ID 
GROUP BY qryRef_Routes_tbl.Ref_Route_Name, qryRef_Routes_tbl.Ref_Route_ID, tblFMS_Data.FM_FinYear, tblFMS_Data.FM_Period, tblPeriod_Lookup.PL_ID 
HAVING 
(
(
    tblPeriod_Lookup.PL_ID Between [Forms]![frmMainMenu]![PriorPeriodID] And 
    ([Forms]![frmMainMenu]![PriorPeriodID]-12) 
) 
) 
UNION 
SELECT qryRef_Routes_tbl.Ref_Route_Name, qryRef_Routes_tbl.Ref_Route_ID, tblFMS_Data.FM_FinYear, tblFMS_Data.FM_Period, 
tblPeriod_Lookup.PL_ID, Sum(IIf([FM_TrustNo]=0 And [FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS Success, 
Sum(IIf([FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS CountPrevent 
FROM 
(
(
    (tblFMS_Data INNER JOIN qryRef_Routes_tbl ON tblFMS_Data.FM_Route = qryRef_Routes_tbl.Ref_Route_ID) 
    INNER JOIN tblRCM_II_Assets ON tblFMS_Data.FM_EllipseNo = tblRCM_II_Assets.RI_Pway_Number 
) 
    INNER JOIN tblPeriod_Lookup ON tblFMS_Data.FM_FinYear = tblPeriod_Lookup.PL_FinYear 
    AND tblFMS_Data.FM_Period = tblPeriod_Lookup.PL_PeriodNo 
) 
INNER JOIN qryRef_Detectable_Failure_Valid_Combo ON tblFMS_Data.FM_Component2 = qryRef_Detectable_Failure_Valid_Combo.Ref_Fault_Comp2_ID 
AND tblFMS_Data.FM_Component = qryRef_Detectable_Failure_Valid_Combo.Ref_Fault_Comp1_ID 
GROUP BY qryRef_Routes_tbl.Ref_Route_Name, qryRef_Routes_tbl.Ref_Route_ID, tblFMS_Data.FM_FinYear, tblFMS_Data.FM_Period, tblPeriod_Lookup.PL_ID 
HAVING 
(
(
    tblPeriod_Lookup.PL_ID Between [Forms]![frmMainMenu]![PriorPeriodID] And [Forms]![frmMainMenu]![PriorPeriodID]-12 
) 
); 

從這個結果被複制。我希望將重複行的結果合併。

注意加入查詢是在2個查詢是Union'd

+0

你的意思是使用每組的「第一」? – Sulyman

+0

請以更好的方式格式化你的sql查詢。 – Felix

+0

「聯合」在聯合數據集上執行不同的操作。 Union all將保留兩套中的所有記錄,從而允許重複。因此,如果您使用聯盟查看TRUE重複記錄,無論是引擎爆發/錯誤,還是您的記錄都不完全相同(可能是非顯示字符?),以「合併」您需要將聯合包裹在通過適當的字段聚合(總和,計數)和組的外部選擇。 – xQbert

回答

0

使用UNION DISTINCT略有不同,如果你不想重複值

0

也許你的意思是結合工會的結果對總量.. 。

SELECT sub.Ref_Route_Name 
    , sub.Ref_Route_ID 
    , sub.FM_FinYear 
    , sub.FM_Period 
    , sub.PL_ID 
    , Sum(sub.Success) as Success 
    , Sum(sub.CountPrevent) as countPrevent 
FROM (
SELECT qryRef_Routes_tbl.Ref_Route_Name 
    , qryRef_Routes_tbl.Ref_Route_ID 
    , tblFMS_Data.FM_FinYear 
    , tblFMS_Data.FM_Period 
    , tblPeriod_Lookup.PL_ID 
    , Sum(IIf([FM_TrustNo]=0 And [FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS Success 
    , Sum(IIf([FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS CountPrevent 
FROM tblFMS_Data 
INNER JOIN qryRef_Routes_tbl 
    ON tblFMS_Data.FM_Route = qryRef_Routes_tbl.Ref_Route_ID 
INNER JOIN tblRCM_II_Assets 
    ON tblFMS_Data.FM_EllipseNo = tblRCM_II_Assets.RI_Number 
INNER JOIN tblPeriod_Lookup PL 
    ON tblFMS_Data.FM_FinYear = tblPeriod_Lookup.PL_FinYear 
AND tblFMS_Data.FM_Period = tblPeriod_Lookup.PL_PeriodNo 
INNER JOIN qryRef_Detectable_Failure_Valid_Combo rdfvc 
    ON tblFMS_Data.FM_Component2 = rdfvc.Ref_Fault_Comp2_ID 
AND tblFMS_Data.FM_Component = rdfvc.Ref_Fault_Comp1_ID 
WHERE PL.PL_ID Between [Forms]![frmMainMenu]![PriorPeriodID] And[Forms]![frmMainMenu]![PriorPeriodID]-12 
GROUP BY qryRef_Routes_tbl.Ref_Route_Name 
    , qryRef_Routes_tbl.Ref_Route_ID 
    , tblFMS_Data.FM_FinYear 
    , tblFMS_Data.FM_Period, tblPeriod_Lookup.PL_ID 
UNION ALL 
SELECT qryRef_Routes_tbl.Ref_Route_Name 
    , qryRef_Routes_tbl.Ref_Route_ID 
    , tblFMS_Data.FM_FinYear 
    , tblFMS_Data.FM_Period 
    , tblPeriod_Lookup.PL_ID 
    , Sum(IIf([FM_TrustNo]=0 And [FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS Success 
    , Sum(IIf([FM_Incident]=25 And [Ref_Fault_Valid_Combo]=-1,1,0)) AS CountPrevent 
FROM tblFMS_Data 
INNER JOIN qryRef_Routes_tbl 
    ON tblFMS_Data.FM_Route = qryRef_Routes_tbl.Ref_Route_ID 
INNER JOIN tblRCM_II_Assets 
    ON tblFMS_Data.FM_EllipseNo = tblRCM_II_Assets.RI_Pway_Number 
INNER JOIN tblPeriod_Lookup PL 
    ON tblFMS_Data.FM_FinYear = tblPeriod_Lookup.PL_FinYear 
AND tblFMS_Data.FM_Period = tblPeriod_Lookup.PL_PeriodNo 
INNER JOIN qryRef_Detectable_Failure_Valid_Combo rdfvc 
    ON tblFMS_Data.FM_Component2 = rdfvc.Ref_Fault_Comp2_ID 
AND tblFMS_Data.FM_Component = rdfvc.Ref_Fault_Comp1_ID 
WHERE PL.PL_ID Between [Forms]![frmMainMenu]![PriorPeriodID] And [Forms]![frmMainMenu]![PriorPeriodID]-12 
GROUP BY qryRef_Routes_tbl.Ref_Route_Name 
     , qryRef_Routes_tbl.Ref_Route_ID 
     , tblFMS_Data.FM_FinYear 
     , tblFMS_Data.FM_Period 
     , tblPeriod_Lookup.PL_ID 

) Sub 
GROUP BY Sub.Ref_Route_Name 
     , sub.Ref_Route_ID 
     , sub.FM_FinYear 
     , sub.FM_Period 
     , sub.PL_ID 

不知道從查詢結果的重複,應「合併」或消除爲重複的,因此所有加入工會。

+0

不工作 - 說'在SQL語句結束後發現字符 –

+0

啊a)工會之前所有需要/需要除去。 – xQbert

+0

對不起,這是用Microsoft Access編寫的,這是我使用的程序 –