首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我得到以下SQL查询的重复记录

为什么我得到以下SQL查询的重复记录
EN

Stack Overflow用户
提问于 2012-11-11 22:16:00
回答 1查看 89关注 0票数 0

我有以下疑问:

代码语言:javascript
复制
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') 

它将生成以下输出:

代码语言:javascript
复制
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

但我期望得到以下结果:

代码语言:javascript
复制
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。我在查询中做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-11-11 22:48:39

为什么我得到重复的记录?

这个问题的答案在很大程度上取决于源表中的数据。

这只是一个猜测(因为我没有您的真实表和数据,所以无法运行查询):

我认为在查询的末尾也需要一条GROUP BY语句。查询可能如下所示:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13331914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档