首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SUM数据选择-2个具有相同id的人

SUM数据选择-2个具有相同id的人
EN

Stack Overflow用户
提问于 2012-12-11 18:02:32
回答 2查看 102关注 0票数 1

我的查询显示两个人的名字分别是"Anna“、"Szymkowiak”和这个相同的"id“,但这是同一个人。我该如何求和呢?例如:id "80","Anna","Szymkowiak"," 23 ",2 -> 23是20个月加3的和,2是Aneks 1加1的和

代码语言:javascript
复制
SELECT DISTINCT SBA.HRSystemId AS Id, SBA.FirstName,  SBA.Surname, 
    CASE WHEN SBA.EndDate < GETDATE() 
    THEN DATEDIFF(MONTH,SBA.StartDate,SBA.EndDate)
    ELSE DATEDIFF(MONTH,SBA.StartDate, GETDATE()) 
    END AS Miesiace_Przepracowane,
    MAX(SBC.ContractNumber) AS Aneks
    FROM SB_Applications SBA JOIN SB_Contracts SBC ON SBA.ApplicationId = SBC.ApplicationId 
    WHERE SBA.IsActiveYN = 1 AND SBA.HRSystemId != 0 AND SBC.ApplicationStatusId = 4
    GROUP BY SBA.FirstName, SBA.Surname,SBA.StartDate,SBA.EndDate,SBA.StartDate,SBA.HRSystemId,SBC.ContractNumber;

我得到了这个:

代码语言:javascript
复制
id |FirstName|Surname|Miesiace_Przepracowane|Aneks
80, Anna, Szymkowiak, 20, 1
80, Anna, Szymkowiak, 3, 1
91, Jack, Sparrow, 2, 1
92, Tom, Jones, 1, 1
100, Rocky, Balboa, 3, 0

这个例子不起作用

感谢同事的帮助,这对我来说是一次很好的训练:)我给你的帮助点数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 18:07:35

当您已经有GROUP BY时,您几乎不想使用DISTINCT;它是无关的。

最自然、最快速的方法是使用派生表扩展查询:

代码语言:javascript
复制
SELECT HRSystemId, FirstName, SurName,
       Sum(Miesiace_Przepracowane) Miesiace_Przepracowane,
       MAX(Aneks) Aneks
FROM
(
    SELECT SBA.HRSystemId AS Id, SBA.FirstName,  SBA.Surname, 
        CASE WHEN SBA.EndDate < GETDATE() 
        THEN DATEDIFF(MONTH,SBA.StartDate,SBA.EndDate)
        ELSE DATEDIFF(MONTH,SBA.StartDate, GETDATE()) 
        END AS Miesiace_Przepracowane,
        MAX(SBC.ContractNumber) AS Aneks
        FROM SB_Applications SBA JOIN SB_Contracts SBC ON SBA.ApplicationId = SBC.ApplicationId 
        WHERE SBA.IsActiveYN = 1 AND SBA.HRSystemId != 0 AND SBC.ApplicationStatusId = 4
        GROUP BY SBA.FirstName, SBA.Surname,SBA.StartDate,SBA.EndDate,SBA.StartDate,SBA.HRSystemId,SBC.ContractNumber
) X
GROUP BY HRSystemId, FirstName, SurName;
票数 1
EN

Stack Overflow用户

发布于 2012-12-11 18:08:43

代码语言:javascript
复制
Select ID,FirstName,Surname,SUM(Miesiace_Przepracowane) as Miesiace_Przepracowane,SUM(Aneks) as Aneks from
(
SELECT DISTINCT SBA.HRSystemId AS Id, SBA.FirstName,  SBA.Surname, 
    CASE WHEN SBA.EndDate < GETDATE() 
    THEN DATEDIFF(MONTH,SBA.StartDate,SBA.EndDate)
    ELSE DATEDIFF(MONTH,SBA.StartDate, GETDATE()) 
    END AS Miesiace_Przepracowane,
    MAX(SBC.ContractNumber) AS Aneks
    FROM SB_Applications SBA JOIN SB_Contracts SBC ON SBA.ApplicationId = SBC.ApplicationId 
    WHERE SBA.IsActiveYN = 1 AND SBA.HRSystemId != 0 AND SBC.ApplicationStatusId = 4
    GROUP BY SBA.FirstName, SBA.Surname,SBA.StartDate,SBA.EndDate,SBA.StartDate,SBA.HRSystemId,SBC.ContractNumber;
) a
Group by  ID,FirstName,Surname  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13817797

复制
相关文章

相似问题

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