2012-11-11 21 views
0

我有以下查詢:爲什麼我收到重複的記錄下面的SQL查詢

SELECT 
    l.ModelTypeIndexNumber AS [Model Index Number], 
    l.TestGroupname AS [Test Group], 
    lf.CE_Fuel AS [Fuel], 
    CASE 
     WHEN lf.Electricity = '' THEN '(missing)' \ 
     ELSE lf.Electricity 
    END AS [Electric Motor Energy Source], 
    tg.TG_Fuel + ', EL' AS [TG Fuel Sources], 
    CASE 
     WHEN l.LabelCalculationApproachIdentifier ='PHEV' THEN 'PHEV' 
     ELSE '(Not PHEV)' 
    END AS [Label Calculation Approach] 
FROM Relational.Label l 
INNER JOIN (
    SELECT 
     lbl.SubmissionId, 
     lbl.ModelTypeIndexNumber, 
     COUNT(*) AS lblFuelCount, 
     MAX(CASE 
       WHEN fu.FuelUsageIdentifier <>'EL' THEN fu.FuelUsageIdentifier 
       ELSE NULL 
      END) AS CE_Fuel, 
     MAX(CASE 
       WHEN fu.FuelUsageIdentifier ='EL' THEN fu.FuelUsageIdentifier 
       ELSE '' 
      END) AS Electricity 
    FROM Relational.Label lbl 
    INNER JOIN Relational.FuelUsage fu 
     ON lbl.LabelId=fu.LabelId 
    WHERE [email protected] 
    GROUP BY lbl.SubmissionId, lbl.ModelTypeIndexNumber 
    ) AS lf 
    ON l.SubmissionId=lf.SubmissionId 
INNER JOIN (
    SELECT 
     rtg.SubmissionId, 
     rtg.TestGroupName, 
     MAX(CASE 
      WHEN ds.FuelId <> 'EL' THEN ds.FuelId 
      ELSE NULL 
     END) AS TG_Fuel 
    FROM Relational.DriveSource ds 
    INNER JOIN Relational.TestGroup rtg 
     ON ds.TestGroupId=rtg.TestGroupId 
    WHERE [email protected] 
    GROUP BY rtg.SubmissionId, rtg.TestGroupName 
    HAVING COUNT(*)>1 AND MAX(CASE WHEN ds.FuelId ='EL' THEN 1 ELSE 0 END) = 1 
    ) AS tg 
    ON lf.SubmissionId=tg.SubmissionId 
    AND l.TestGroupName = tg.TestGroupName 
WHERE (lf.Electricity = '' AND l.LabelCalculationApproachIdentifier = 'PHEV') 

它產生的輸出如下:

Model Index Number Test Group Fuel TG Fuel Source(s) Label Calculation Approach 
19     ABC.1987  GP  DX, EL    PHEV 
19     XYZ.1989  DM  DS, EL    PHEV 
20     ABC.1987  GP  DX. EL    PHEV 
20     XYZ.1989  DM  DS, EL    PHEV 

但我希望得到以下結果:

Model Index Number Test Group Fuel TG Fuel Source(s) Label Calculation Approach 
19     ABC.1987  GP  DX, EL    PHEV 
20     XYZ.1989  DM  DS, EL    PHEV 

我不想重複。也許加入問題。我嘗試了DISTINCT。我在查詢中做了什麼錯誤?

回答

0

爲什麼我得到重複記錄?

這個問題的答案很大程度上取決於源表中的數據。


這只是一個猜測,(因爲我沒有你的真表和數據,我不能運行查詢):

我想你在查詢的結尾需要一個GROUP BY聲明,以及。您的查詢可能如下所示:

SELECT 
    l.ModelTypeIndexNumber AS [Model Index Number], 
    l.TestGroupname AS [Test Group], 
    MAX(lf.CE_Fuel AS [Fuel]), 
    MAX(CASE 
     WHEN lf.Electricity = '' THEN '(missing)' \ 
     ELSE lf.Electricity 
    END) AS [Electric Motor Energy Source], 
    MAX(tg.TG_Fuel + ', EL') AS [TG Fuel Sources], 
    MAX(CASE 
     WHEN l.LabelCalculationApproachIdentifier ='PHEV' THEN 'PHEV' 
     ELSE '(Not PHEV)' 
    END) AS [Label Calculation Approach] 
FROM Relational.Label l 
INNER JOIN (
    SELECT 
     lbl.SubmissionId, 
     lbl.ModelTypeIndexNumber, 
     COUNT(*) AS lblFuelCount, 
     MAX(CASE 
       WHEN fu.FuelUsageIdentifier <>'EL' THEN fu.FuelUsageIdentifier 
       ELSE NULL 
      END) AS CE_Fuel, 
     MAX(CASE 
       WHEN fu.FuelUsageIdentifier ='EL' THEN fu.FuelUsageIdentifier 
       ELSE '' 
      END) AS Electricity 
    FROM Relational.Label lbl 
    INNER JOIN Relational.FuelUsage fu 
     ON lbl.LabelId=fu.LabelId 
    WHERE [email protected] 
    GROUP BY lbl.SubmissionId, lbl.ModelTypeIndexNumber 
    ) AS lf 
    ON l.SubmissionId=lf.SubmissionId 
INNER JOIN (
    SELECT 
     rtg.SubmissionId, 
     rtg.TestGroupName, 
     MAX(CASE 
      WHEN ds.FuelId <> 'EL' THEN ds.FuelId 
      ELSE NULL 
     END) AS TG_Fuel 
    FROM Relational.DriveSource ds 
    INNER JOIN Relational.TestGroup rtg 
     ON ds.TestGroupId=rtg.TestGroupId 
    WHERE [email protected] 
    GROUP BY rtg.SubmissionId, rtg.TestGroupName 
    HAVING COUNT(*)>1 AND MAX(CASE WHEN ds.FuelId ='EL' THEN 1 ELSE 0 END) = 1 
    ) AS tg 
    ON lf.SubmissionId=tg.SubmissionId 
    AND l.TestGroupName = tg.TestGroupName 
WHERE (lf.Electricity = '' AND l.LabelCalculationApproachIdentifier = 'PHEV') 
GROUP BY  
    l.ModelTypeIndexNumber, 
    l.TestGroupname