1

Web サイトの各ユーザーの実行ごとに結果をシフトするクエリを作成しようとしています。SQL Server 2008 データベース テクノロジを使用してこれを達成することを目標とします。

たとえば、3 行のデータを含むテーブルがあるとします。

このデータの順序を名前の昇順で選択し、結果をシフト/回転する方法を見つけようとしています。

ID  Name 
1   Apple 
2   Orange 
3   Banana

ユーザー 1 がページを読み込んで見る

Apple
Banana
Orange

ユーザー 1 が同じページをリロードすると、

Banana
Orange
Apple

ユーザー 1 が同じページをリロードすると、

Orange
Apple
Banana

ユーザー 2 などはまったく同じ経験を持ち、結果を同じ順序で回転/シフトします。

姓名や ID など、必要な値を作成して保存できます。

SQL Server レベルでこのタスクを実行するシンプルで洗練されたソリューション (クエリ、ストアド プロシージャ、関数など) はありますか?

その理由は、A から Z までのアルファベット順ではなく、すべての色がリストの一番上に表示されるようにするためです。

4

2 に答える 2

1

SQL Server にnextval()PostgreSQL や Oracle のようなシーケンスと関数がある場合、それはそれと同じくらい簡単になる可能性があります-ベースソートが 1 から始まり、穴のない id にあった場合:

SELECT id, name
  FROM mytbl
 ORDER BY CASE WHEN id > @nextval%number_of_rows THEN 0 ELSE 1 END, rn

回避策については、こちらを参照してください: Oracle シーケンスですが、MS SQL Server で

質問からの新しい入力で編集

次に、次のようになります。

DECLARE @nextval int;

WITH x AS
(
SELECT id
      ,name
      ,ROW_NUMBER() OVER(ORDER BY name) AS rn
      ,COUNT(*) OVER() AS ct
  FROM mytbl 
)
SELECT id
      ,name
  FROM x
 ORDER BY CASE WHEN rn > @nextval%ct THEN 0 ELSE 1 END, rn
  • アルファベット順に並べ替えます。
  • 行数動的。
  • 構文は現在テストされています
  • @nextval をインクリメントする方法だけが必要です。上記のリンクが役立つ場合があります。

構文を正しく理解するために、 data.stackexchange.comにデモ
を書きまし た。そこに行って確認してください。

SQL Server に LIMIT や OFFSET などがある場合、これはより簡単になります。TOP仕事ができません。参照: SQL Server の LIMIT と OFFSET と同等ですか?

于 2011-10-10T03:51:50.103 に答える