× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



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 thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.