2012-12-11 46 views
1

我的查詢顯示名爲「Anna」,「Szymkowiak」和這個相同的「id」的兩個人,但這是同一個人。我怎麼總結這個?例如:ID爲 「80」, 「安娜」, 「Szymkowiak」, 「23」,2 - > 23月20 + 3和2的總和Aneks 1的總和加上1和數據選擇 - 與此同一個id的兩個人

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; 

和我這樣的:

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 

這個例子不起作用 enter image description here

感謝您的幫助的同事,這是很好的鍛鍊,我:)我給你點幫助。

回答

1

當你已經擁有GROUP BY時,你幾乎從不想使用DISTINCT;它是無關的。
最自然,最快捷的方法是使用派生表來擴展您的查詢:

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; 
+0

這個例子沒有在我的更新工作後看 –

+0

由於Aneks可以改變,那麼你從刪除外面的組通過並選擇MAX(Anex),而不是 – RichardTheKiwi

1
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 
+0

這個事情我已經得到紅色 - 身份證,姓氏,姓氏,Miesiace_Przepracowane,Aneks在你的選擇,我不知道爲什麼? –