order
我有一个表 T (下面的结构),它最初在一个整数列中包含全 NULL 值:
col1 varchar(30), col2 varchar(30), 订购 int NULL
我还有一种订购“colN”列的方法,例如
SELECT * FROM T ORDER BY some_expression_involving_col1_and_col2
将 - IN SQL - 数字顺序值 1-N 分配给顺序表的最佳方法是什么,以便顺序值与上述 ORDER BY 返回的行顺序相匹配?
换句话说,我想要一个查询(Sybase SQL 语法,所以没有 Oracle 的行计数),它分配order
值以便SELECT * FROM T ORDER BY order
返回与上述查询 100% 相同的行顺序。
查询不一定需要就地更新表 T,如果这样可以使查询更简单,我可以创建表 T2 的副本。
NOTE1:解决方案必须是真正的查询或一组查询,不涉及循环或游标。
注意 2:假设数据是唯一可根据上述 order by 排序的 - 无需担心 2 行可以随机分配相同的 order 的情况。
注意 3:我更喜欢通用解决方案,但如果您想要一个特定的排序表达式示例,可以说:
从 T 中选择 * 按大小写排序 WHEN col1="" THEN "AAAAAA" ELSE col1 END, ISNULL(col2, "ZZZ")