2017-09-11 2 views
-1
SELECT Emp.IntegrationFieldOne AS LocationCode, Emp.EmployeeId, 
Emp.FirstName + ' '+ Emp.LastName as 'EmployeeName', 
CASE WHEN ((ORSet.Rate) =1.5 ) THEN 
Sum(OT.Minutes) 
END AS '1.5HRSMinutes', 

CASE WHEN(ORSet.Rate =2 ) THEN 
Sum(OT.Minutes) 
END AS '2HRSMinutes' 

FROM [CemexDB_CP_Test].[TimeAttendance].[OvertimeTransaction] OT 
INNER JOIN [HumanResource].[Employee] Emp ON OT.EmployeeId = Emp.EmployeeId 
INNER JOIN [CemexDB_CP_Test].[TimeAttendance].[OvertimeRateSettingDetail] 
ORSet ON ORSet.OvertimeRateSettingId= OT.OvertimeType 

GROUP BY Emp.EmployeeId,Emp.FirstName,Emp.LastName,Emp.IntegrationFieldOne,ORSet.Rate[! 

This is Output picture click it] 1Comment écrire une fonction CASE deux méthode ALORS en même temps FIN AS deux colonnes NOUVEAU dépendent de l'action ALORS

C'est à mettre, mais je veux même ligne dépendent même id. mais ici chaque id a 2 ligne comment le gérer

+1

Fournir des exemples de données et les résultats souhaités. –

Répondre

0

Je pense que vous voulez l'agrégation conditionnelle:

SELECT Emp.IntegrationFieldOne AS LocationCode, Emp.EmployeeId, 
     Emp.FirstName + ' '+ Emp.LastName as EmployeeName, 
     SUM(CASE WHEN ORSet.Rate = 1.5 THEN OT.Minutes END) AS [1.5HRSMinutes], 
     SUM(CASE WHEN ORSet.Rate = 2 THEN OT.Minutes END) AS [2HRSMinutes] 
FROM [CemexDB_CP_Test].[TimeAttendance].[OvertimeTransaction] OT INNER JOIN 
    [HumanResource].[Employee] Emp 
    ON OT.EmployeeId = Emp.EmployeeId INNER JOIN 
    [CemexDB_CP_Test].[TimeAttendance].[OvertimeRateSettingDetail] 
ORSet 
    ON ORSet.OvertimeRateSettingId= OT.OvertimeType 
GROUP BY Emp.EmployeeId, Emp.FirstName, Emp.LastName, Emp.IntegrationFieldOne; 
+0

il montre l'erreur "" SUM "n'est pas un nom de fonction intégré reconnu.". ici [1.5HRSMinutes] cette colonne n'est pas une colonne prédéfinie –

+0

@ Av.Raj. . . Il y avait des parenthèses déséquilibrées. Quoiqu'il en soit, 'SUM()' * est * une fonction intégrée. –

+0

oui je l'avise et l'équilibre mais aussi ça ne marche pas –