Run the following script to create tables.
- Employee
- Payroll
create table Employee
(
EmployeeID int primary key identity,
Name varchar(150),
NationalIDNo varchar(50),
PhoneNo varchar(20)
)
CREATE TABLE [dbo].[Payroll](
[PayrollID] [int] IDENTITY(1,1) NOT NULL,
[EmployeeID] [int] NULL,
[PayYear] [int] NULL,
[PayMonth] [int] NULL,
[BasicSalary] [decimal](18, 2) NULL,
[HomeAllownce] [decimal](18, 2) NULL,
[MedicalAllownce] [decimal](18, 2) NULL,
[NetAmount] AS (([BasicSalary]+[HomeAllownce])+[MedicalAllownce]),
CONSTRAINT [PK_Payroll] PRIMARY KEY CLUSTERED
(
[PayrollID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Payroll] WITH CHECK ADD CONSTRAINT [FK_Payroll_Employee] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[Employee] ([EmployeeID])
GO
ALTER TABLE [dbo].[Payroll] CHECK CONSTRAINT [FK_Payroll_Employee]
- Run the following script to insert records in tables
INSERT INTO [Employee]([Name],[NationalIDNo],[PhoneNo]) VALUES('Hilaly','NID1234567','+966897667')
INSERT INTO [Employee]([Name],[NationalIDNo],[PhoneNo]) VALUES('Mirwaise','6786876','+966897767786')
INSERT INTO [Employee]([Name],[NationalIDNo],[PhoneNo]) VALUES('Zahir Jan','Abc-67687767','+96689766789')
INSERT INTO [Employee]([Name],[NationalIDNo],[PhoneNo]) VALUES('Waseem','zvw-67687767','+9668978676')
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(1,2014,3,30000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(1,2014,4,30000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(1,2014,5,30000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(1,2015,3,30500,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(1,2016,4,31000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(2,2014,9,32000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(2,2014,10,32000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(2,2014,12,32500,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(2,2015,6,33000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(2,2016,7,33000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(3,2014,6,40000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(3,2014,7,40000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(3,2014,11,40500,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(3,2015,6,41000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(3,2016,7,41500,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(4,2014,6,50000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(4,2014,7,50000,10000,5000)
INSERT INTO [dbo].[Payroll]([EmployeeID],[PayYear],[PayMonth],[BasicSalary],[HomeAllownce],[MedicalAllownce])
VALUES(4,2014,11,50500,10000,5000)
- And Finally the query which gives you the latest salary issued to employee
;with tbl as(
SELECT rn = ROW_NUMBER() OVER (PARTITION BY EmployeeID
ORDER BY PayrollID DESC, EmployeeID DESC), *
FROM dbo.Payroll
)
select e.EmployeeID, e.Name,e.NationalIDNo,t.PayrollID,t.PayYear,
t.PayMonth,t.BasicSalary,t.HomeAllownce,
t.MedicalAllownce,t.NetAmount from tbl as t,Employee as e where rn=1 and
t.EmployeeID=e.EmployeeID order by e.EmployeeID
- The required output
Post a Comment
Post a Comment