最初に整数order
列にすべて NULL 値を含むテーブル T (以下の構造) があります。
col1 varchar(30), col2 varchar(30)、 注文 int NULL
「colN」列を注文する方法もあります。
SELECT * FROM T ORDER BY some_expression_involving_col1_and_col2
順序値が上記の ORDER BY によって返される行の順序と一致するように、-IN SQL-数値順序値 1-N を順序テーブルに割り当てる最良の方法は何ですか?
言い換えれば、上記のクエリと 100% 同じ順序の行order
を返すように値を割り当てる単一のクエリ (Sybase SQL 構文のため、Oracle の行数はありません) が必要です。SELECT * FROM T ORDER BY order
クエリは必ずしもテーブル T をその場で更新する必要はありません。テーブル T2 のコピーを作成することでクエリが簡単になるのであれば問題ありません。
注 1: ソリューションは、ループやカーソルを含まない、実際のクエリまたは一連のクエリである必要があります。
注 2: データは上記の順序に従って一意に順序付け可能であると仮定します。2 つの行が同じ順序でランダムに割り当てられる状況について心配する必要はありません。
注3:私は一般的な解決策を好みますが、順序付け式の特定の例が必要な場合は、次のように言いましょう:
T から * を選択 ORDER BY CASE WHEN col1="" THEN "AAAAAA" ELSE col1 END, ISNULL(col2, "ZZZ")