Refer the below test query.
DECLARE @TblEmployee AS TABLE(Employeeid INT,EName VARCHAR(20),ECode INT,ESalary INT)
INSERT INTO @TblEmployee VALUES(1,'A',1,6000)
INSERT INTO @TblEmployee VALUES(2,'B',1,1100)
INSERT INTO @TblEmployee VALUES(3,'C',1,1200)
INSERT INTO @TblEmployee VALUES(4,'D',1,1300)
DECLARE @TblEmployeeAttendance AS TABLE(Employeeid INT,Attendancedate DATETIME)
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE()-1)
INSERT INTO @TblEmployeeAttendance VALUES(2,GETDATE()-2)
INSERT INTO @TblEmployeeAttendance VALUES(2,GETDATE()-3)
INSERT INTO @TblEmployeeAttendance VALUES(3,GETDATE()-3)
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE())
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE())
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE())
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE())
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE())
INSERT INTO @TblEmployeeAttendance VALUES(1,GETDATE())
SELECT ROW_NUMBER() OVER (ORDER BY TblEmployee.Employeeid ASC) AS RowNo,
TblEmployee.Employeeid,TblEmployee.EName,TblEmployee.ECode,
(TblEmployee.ESalary * (COUNT(TblEmployeeAttendance.Attendancedate))/30)AS Salary
FROM @TblEmployeeAttendance TblEmployeeAttendance
INNER JOIN @TblEmployee TblEmployee
ON TblEmployee.Employeeid = TblEmployeeAttendance.Employeeid
GROUP BY TblEmployee.Employeeid,TblEmployee.EName,TblEmployee.ECode,TblEmployee.ESalary
OutPut
RowNo |
Employeeid |
EName |
ECode |
Salary |
1 |
1 |
A |
1 |
1400 |
2 |
2 |
B |
1 |
73 |
3 |
3 |
C |
1 |
40 |