0

次のクエリがあります。

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 lbl.SubmissionId=@SubmissionId 
    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 rtg.SubmissionId=@SubmissionId 
    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でやってみました。クエリで何が間違っていますか?

4

1 に答える 1

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 lbl.SubmissionId=@SubmissionId 
    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 rtg.SubmissionId=@SubmissionId 
    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
于 2012-11-11T14:48:38.653 に答える