質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

4回答

2844閲覧

DBの番号の整列

newtorino

総合スコア47

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/06/29 07:08

編集2022/01/12 10:55

いつもお世話になっております。
C#でWEBアプリを作成しています。

ListViewでDBを表示して表を作っているのですが、
DBに番号のカラムを作成し、順番を入れ替えをしたいと思っています。
例えば初期のDBが以下の画像だとします
イメージ説明

次に、みかんの2の数字を5にインサートするとします。
そうすると、次のように番号が整列します。
イメージ説明

また、初期のDBからレモンの5を2にインサートするとします。
そうすると、次のように番号が整列します。
イメージ説明

このように、一つの数字を変えたら順番になるように数字を整列させたいのですが可能でしょうか?

やり方をを調べてみましたが、
順番などで調べるとソートのことしか検索ででてこず
数字を変更したときの整列等なかなかでてこないので全く何からすればいいのかもわからずにいます。
なにか参考になるサイトや、アドバイスが欲しいです。

どうかよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaya_ohashi

2016/06/29 07:20

現在のテーブルの構成も書いてみてください。
guest

回答4

0

sql-serverで連番に一括更新

※ 主キーではない順番フィールドと更新日付フィールドを定義していることが前提です。
1:任意の順番番号、更新日付フィールド=現在日時でupdate
-> この時点では順番番号が被ると思いますが、更新日付で順番番号を優先させることができます。
2:リンク先を参考に、ROW_NUMBER()を使い順番フィールドを一括update
-> ROW_NUMBER()は順番フィールド、更新日付の降順でselectします。

投稿2016/07/01 05:26

編集2016/07/01 05:27
f_horizon

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

気分転換に代理検索他行ってみました。

初期のDBからレモンの5を2にインサートするとします。

INSERT 文を発行してしまったら、データの件数が増えてしまいます。
既存データの書換は、UPDATE 文でデータの書換を行います。
'
人工キー:artifical key
自然キー:natural key
代替キー:surrogate key

SQL リナンバー
https://www.google.co.jp/search?hl=ja&q=SQL+%E3%83%AA%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC&lr=lang_ja&gws_rd=ssl

SQL Server ROW_NUMBER
https://www.google.co.jp/search?hl=ja&q=SQL+%E3%83%AA%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC&lr=lang_ja&gws_rd=ssl#lr=lang_ja&hl=ja&tbs=lr:lang_1ja&q=SQL+Server+ROW_NUMBER'
'
SQL 値 交換
https://www.google.co.jp/search?hl=ja&q=DB+INSERT+%E5%8F%A5&lr=lang_ja&gws_rd=ssl#lr=lang_ja&hl=ja&tbs=lr:lang_1ja&q=SQL+%E5%80%A4+%E4%BA%A4%E6%8F%9B
では目的の事柄が出て来ないですが

SQL 値 SWAP
https://www.google.co.jp/search?hl=ja&q=SQL+%E3%83%AA%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC&lr=lang_ja&gws_rd=ssl#lr=lang_ja&hl=ja&tbs=lr:lang_1ja&q=SQL+%E5%80%A4+SWAP
では、名著「プログラマのためのSQL 第4版」監訳ミック、がヒットしました。
プログラマのためのSQL 第4版 - 342 ページ
SQL で値を入れ替える最も簡単な方法は、UPDATE文を何個も書くことだ。SET句では複数の列を書けることを覚えているだろうか。、、、

集合論に於いては、順番の概念は存在しません。
順番は、人と処理の都合の為に存在します。
⇒データが登録順に呼出される事は規定されません。
あくまでも実装上の都合でそうみえるだけです。

MS SQL Server を使う場合は、MS SQL Server Management studio を入れて
Management studio 上で、テーブル、クエリ、ストアド、スクリプトの単体確認
パフォーマンス確認をしたりします。
⇒Local DB / Attached DB では、SQL Server インスタンスにいないので、注意
(コード実行中、デバッグ中はプロパティ設定により、何れのDBが使用されるかが決まります。)

例えば

テーブル名 :tstsmpl とします。

ID:bigint:主キー とします。連番とします。(IDENTITYの指定:はい)
適切な一意のnatural key が無い場合は、
artifical key として、連番や、GUIDを使います。
VS20xx でDBを扱おうとすると、主キーありきの場合が多いですので
主キーに困った時は、IDで連番を付けます。
cID:bigint:表示順番号のカラム とします。表示順として使用します。
UNIQUE 制約を掛けてしまうと、一意に規定されるので、UNIQUE制約は取りあえずかけない
fNm:nvarchar(50):果物名称 とします。

前提:表示順に抜けが無い、1番から連番で昇順に表示順番号が付いている
データ:表示順1~10迄値が入っているとします。
cID fNm
1 りんご
2 みかん
3 バナナ
4 キウィ
5 レモン
6 ブドウ
7 もも
8 イチゴ
9 スイカ
10 ナシ

簡単な例
【1】2番⇒5番
影響範囲、2、3、4、5
SELECT ID,cID, fNm FROM tstsmpl WHERE (cID BETWEEN 2 AND 5) ORDER BY cID

2番を、表示範囲外の数値に
UPDATE tstsmpl SET cID = 1000 WHERE cID = 2

3番~5番を-1
UPDATE tstsmpl SET cID = cID - 1 WHERE (cID BETWEEN 3 AND 5)

旧2番を5番に
UPDATE tstsmpl SET cID = 5 WHERE (cID = 1000)

【2】5番⇒2番
影響範囲、2、3、4、5
SELECT ID,cID, fNm FROM tstsmpl WHERE (cID BETWEEN 2 AND 5) ORDER BY cID

5番を、表示範囲外の数値に
UPDATE tstsmpl SET cID = 1000 WHERE cID = 5

2番~4番を+1
UPDATE tstsmpl SET cID = cID + 1 WHERE (cID BETWEEN 2 AND 4)

旧5番を2番に
UPDATE tstsmpl SET cID = 2 WHERE (cID = 1000)

仕上げは、【1】、【2】で、固定値でバラバラに行っている事を、複合クエリで書いたり、
ストアド+パラメーターで書いたり、
VS20xxで、パラメタライズドクエリで書いたりします。

投稿2016/06/29 09:07

編集2016/06/29 09:17
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

地道に(矛盾なく)自分で update かけるしかないかなあ。
整列に関しては select する時の order 指定しだいなので
気にする必要はないと思います。

投稿2016/06/29 08:03

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

順番を変えたいというようなときは、
みかんの数字を5 レモンの数字を2にするだけです。
番号順に並べ替える というのはやりません。
DBからデータを取得する際に
その番号の順で取得をする指定をするだけです。

逆に、なにかの順でと指定しなければ 順番は保証されません。

投稿2016/06/29 07:39

編集2016/06/29 07:40
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問