FOR EACH type Statement in SQL Server, Select Top 5 of Each Category -
09-09-2010
, 01:28 PM
Hi, hope someone can help. Although I have been using SQL for about 10
years this problem has really got me stumped.
I am using SQL Server 2000.
I want to return the last five weeks data for each employee. Not all
employees are paid each week so I cannot call a set number of weeks.
I have come up with a way to get this information (see SELECT below) by
selecting just one employee but I need the report to include all
employees and it is not practical to hard code each employee.
I need some kind of FOR EACH statement. I have never used Cursors so I
have not tried this route.
I have created sample data, my data is much more involved with many more
employees. If I can get a query to return this data I will be able to
use it.
Thanks
--drop table #employeedata
create table #employeedata
( empno varchar(5),
yeara INT,
perioda INT,
value money
)
INSERT INTO #employeedata VALUES ('10',2010,1,100)
INSERT INTO #employeedata VALUES ('10',2010,2,100)
INSERT INTO #employeedata VALUES ('10',2010,3,100)
INSERT INTO #employeedata VALUES ('10',2010,4,100)
INSERT INTO #employeedata VALUES ('10',2010,5,100)
INSERT INTO #employeedata VALUES ('10',2010,6,100)
INSERT INTO #employeedata VALUES ('10',2010,7,100)
INSERT INTO #employeedata VALUES ('10',2010,8,100)
INSERT INTO #employeedata VALUES ('10',2010,9,100)
INSERT INTO #employeedata VALUES ('10',2010,10,100)
INSERT INTO #employeedata VALUES ('20',2010,1,100)
INSERT INTO #employeedata VALUES ('20',2010,2,100)
INSERT INTO #employeedata VALUES ('20',2010,3,100)
INSERT INTO #employeedata VALUES ('20',2010,4,100)
INSERT INTO #employeedata VALUES ('20',2010,5,100)
INSERT INTO #employeedata VALUES ('20',2010,6,100)
INSERT INTO #employeedata VALUES ('20',2010,7,100)
INSERT INTO #employeedata VALUES ('20',2010,8,100)
INSERT INTO #employeedata VALUES ('20',2010,9,100)
INSERT INTO #employeedata VALUES ('20',2010,10,100)
INSERT INTO #employeedata VALUES ('30',2010,1,100)
INSERT INTO #employeedata VALUES ('30',2010,2,100)
INSERT INTO #employeedata VALUES ('30',2010,3,100)
INSERT INTO #employeedata VALUES ('30',2010,4,100)
INSERT INTO #employeedata VALUES ('30',2010,5,100)
INSERT INTO #employeedata VALUES ('30',2010,6,100)
INSERT INTO #employeedata VALUES ('30',2010,7,100)
INSERT INTO #employeedata VALUES ('30',2010,8,100)
INSERT INTO #employeedata VALUES ('30',2010,9,100)
INSERT INTO #employeedata VALUES ('30',2010,10,100)
INSERT INTO #employeedata VALUES ('40',2010,1,100)
INSERT INTO #employeedata VALUES ('40',2010,2,100)
INSERT INTO #employeedata VALUES ('40',2010,3,100)
INSERT INTO #employeedata VALUES ('40',2010,4,100)
INSERT INTO #employeedata VALUES ('40',2010,7,100)
INSERT INTO #employeedata VALUES ('40',2010,9,100)
INSERT INTO #employeedata VALUES ('50',2010,1,100)
INSERT INTO #employeedata VALUES ('50',2010,2,100)
INSERT INTO #employeedata VALUES ('50',2010,3,100)
INSERT INTO #employeedata VALUES ('50',2010,4,100)
INSERT INTO #employeedata VALUES ('50',2010,5,100)
INSERT INTO #employeedata VALUES ('50',2010,6,100)
INSERT INTO #employeedata VALUES ('50',2010,10,100)
SELECT TOP 5 empno, yeara * 100 + perioda AS 'period', value
FROM #employeedata
WHERE empno = '10'
ORDER BY yeara * 100 + perioda DESC
SELECT TOP 5 empno, yeara * 100 + perioda AS 'period', value
FROM #employeedata
WHERE empno = '50'
ORDER BY yeara * 100 + perioda DESC |