SQL Serverの隣接リストレコード交換(モノ二十から二エクスチェンジ)

ボーはブログでこの質問を公園を見に頼ま:表は二つのフィールドのIDと名前があり、idが連続空でない非繰り返しで、隣接するテーブルの名前レコードの交換価値にしたい(シングルとダブル二十から二交流)。

さらに、最後の行は、単一のマッチングレコードは、次の行ではなく、最後の更新個々の行に対応していない場合。

ビット平均感じて、私は(SQL Serverなど)、それを達成しようとすると、記録されました。

diososテーブルを作成します。

- 表が存在する場合、それはテーブルを削除され
たIF  OBJECT_ID(N ' diosos '、N ' U-は'IS  ない ヌル ドロップ テーブルdiosos;
 - 表を作成して
作成 表の diosos(IDのint型、名前のVARCHAR64));

テーブルにデータを挿入します。

- 插入数据
挿入  diosos(ID、名前)の値1' 1 ' )。
挿入  diosos(ID、名前)の値2' 二つ' );
挿入  diosos(ID、名前)の値3' 3つ' )。
挿入  diosos(ID、名前)の値4' 4つ' );
挿入  diosos(ID、名前)値が5' 5 ' )。
挿入  diosos(ID、名前)の値6' 6 ' )。
挿入  diosos(ID、名前)の値7' 7を' );
挿入  diosos(ID、名前)の値8' ' );
挿入  diosos(ID、名前)の値9" 9");

クエリデータは、第1のために見に出ていないです。

- クエリデータ
SELECT  *  から diosos。

隣接リストレコード交換を達成(モノ二十から二エクスチェンジ)、原理は名前とパリティ判定のidモジュロ減算に基づいて行を更新するID隣接する左の外側の関連付けを行います。

- 更新は、2つのExchange間で、交換が不対でない
更新 D1 のSET d1.name = d2.name
 からdiosos D1が
  参加diosos D2
 ON(d1.idの2  =  0   d1.id =(d2.id +  。1) )又は(d1.id 2  =  1。 及び d1.id =(d2.id -  1 ))
 d2.nameはIS ていないヌル  

成功し、再び照会します。

- 再クエリ
SELECT  *  から diosos。

私は思うが、それでもかなり良い楽しさは、ハッハッハ、ほとんど実際のシーンはありません。


「あなたはこの世界の誰かを信じるように持っているあなたの後ろに痛みを知っている、と人々はシーズンを通してあなたの輝かしいを与えるために喜んでいるでしょう。」

おすすめ

転載: www.cnblogs.com/yanggb/p/11327788.html