|
It is possible with a stored procedure, I think. Maybe what we call user-defined table functions. Do the lookup on google, there were interesting examples there.
There was an example that did not need anything too advanced. Only that a SELECT is used for one of the columns, and that takes V5R1, I think, if not later. It also depends on unique values in the ORDER BY column aggregate. Here's the example over the TPC-H benchmark ORDERS table (1,600,000 records) - modify to suit:
SELECT O_CUSTKEY, O_ORDERKEY, (SELECT COUNT(*) FROM TPCH/ORDERS O2 WHERE O2.O_ORDERKEY <= O.O_ORDERKEY AND O2.O_CUSTKEY = 10) AS ROWNUMBER FROM TPCH/ORDERS O WHERE O_CUSTKEY = 10 ORDER BY O_ORDERKEY
This gave the following:
O_CUSTKEY O_ORDERKEY ROWNUMBER 10 36,422 1 10 816,323 2 10 859,108 3 10 883,557 4 10 895,172 5 10 916,775 6 10 1,490,087 7 10 1,774,689 8 10 2,126,688 9 10 2,917,345 10 10 3,069,221 11 10 3,354,726 12 10 3,487,745 13 10 3,580,034 14 10 3,916,288 15 10 3,942,656 16 10 4,141,668 17 10 4,243,142 18 10 4,407,621 19
To quote, "this is a good solution if you have a field that uniquely identifies a record AND you want to order by that field." I might add, if your ORDER BY fields uniquely identify a record. Then the "<=" would need to use the aggregate of the sort fields (concatenate them).
This is likely to be quite slow - the UDTF is probably better. The following (from Google) might do the job. I've not worked on these at all, yet. Some of the syntax needs to be changed. This requires V5R2. (The UDTF could also be an RPG that reads the file and adds a sequence number.)
CREATE TABLE #RowNumber ( RowNumber int IDENTITY (1, 1), emp_id char(9) )
INSERT #RowNumber (emp_id) SELECT emp_id FROM employee WHERE job_id = 10 ORDER BY lname
SELECT RowNumber, e.emp_id, lname, fname, job_id FROM #RowNumber r JOIN employee e ON r.emp_id = e.emp_id ORDER BY RowNumber
DROP TABLE #RowNumber
HTH Vern
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.