このような要件は、クエリ結果に Identity のような数値の列を追加する必要があることがよくありますが、クライアント プログラミングで実装するのは難しくありませんが、既存のクラスを維持し、追加の作業をしたくない場合があります。クライアント側でコーディングする場合は、SQLで方法を見つけるしかありません
まず、SQLステートメントで完了する方法を紹介します。原則は、レコード数以上をクエリすることです。結果のレコードを取得すると、そのランクを取得できます
例:
USE pubs
SELECT COUNT(*) AS Rank, a1.au_lname, a1.au_fname
FROM authors a1, authors a2
WHERE a1.au_lname a1.au_fname > ;= a2.au_lname a2.au_fname
GROUP BY a1.au_lname, a1 .au_fname
ORDER BY Rank
ただし、この方法には制限があります。1 つ目は、同じレコードが存在する場合、ランクが低下することです。 2が2つあるなど、同点になりますが、もう3はありません
他の方法はありますか?もちろん、SQL には、ID 列の値を取得できる IDENTITY 関数が用意されています。残念ながら、この関数は SELECT INTO ステートメントでのみ使用できるため、一時テーブルを導入する必要があります
例:
pubs
。 SELECT IDENTITY(INT, 1, 1) AS Rank,au_lname,au_fname
INTO #tmp
FROM authors
SELECT * FROM #tmp
DROP TABLE #tmp
ただし、この方法のパフォーマンスと適用性は最初の方法よりも強力です。欠点は、複数の SQL ステートメントを介して完了する必要があることです。
そのため、可能であれば、通常はこの操作をクライアントで完了することをお勧めします
お読みいただき、アドバイスをいただきありがとうございます。