|
Amen to that. I was figuring that my lack of knowledge of SQL was keeping me from a solution that would take just a line or two of code (as it always seems to do). Oh well, it sounds like they're taking care of it in i5/OS. Thanks everyone! Mike E. "M. Lazarus" <mlazarus@xxxxxxxx> Sent by: midrange-l-bounces@xxxxxxxxxxxx 05/06/2004 12:47 AM Please respond to Midrange Systems Technical Discussion To: Midrange Systems Technical Discussion <midrange-l@xxxxxxxxxxxx> cc: Subject: Re: Numbering rows in SQL result set Vern, et al, Does anyone else think that the complex code required to do something this simple and basic in SQL is absurd? I love SQL for some things, but the hoops required to jump through for some other items makes it a clumsy solution many times on the /400. JMHO. -mark At 5/5/04 04:57 PM, you wrote: >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.