What is a good way to assign order #s to ordered rows in a table in Sybase

Posted by DVK on Stack Overflow See other posts from Stack Overflow or by DVK
Published on 2010-05-12T19:13:27Z Indexed on 2010/05/13 17:14 UTC
Read the original article Hit count: 275

Filed under:
|
|
|

I have a table T (structure below) which initially contains all-NULL values in an integer order column:

col1  varchar(30),
col2  varchar(30),
order int NULL

I also have a way to order the "colN" columns, e.g.

SELECT * FROM T ORDER BY some_expression_involving_col1_and_col2

What's the best way to assign - IN SQL - numeric order values 1-N to the order table, so that the order values match the order of rows returned by the above ORDER BY?

In other words, I would like a single query (Sybase SQL syntax so no Oracle's rowcount) which assigns order values so that SELECT * FROM T ORDER BY order returns 100% same order of rows as the query above.

The query does NOT necessarily need to update the table T in place, I'm OK with creating a copy of the table T2 if that'll make the query simpler.

NOTE1: A solution must be real query or a set of queries, not involving a loop or a cursor.

NOTE2: Assume that the data is uniquely orderable according to the order by above - no need to worry about situation when 2 rows can be assigned the same order at random.

NOTE3: I would prefer a generic solution, but if you wish a specific example of ordering expression, let's say:

SELECT * FROM T 
ORDER BY CASE WHEN col1="" THEN "AAAAAA" ELSE col1 END, ISNULL(col2, "ZZZ")

© Stack Overflow or respective owner

Related posts about sql

Related posts about sybase