C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataViewのSortに関して


(過去ログ 52 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■29124 / inTopicNo.1)  DataViewのSortに関して
  
□投稿者/ naanko (1回)-(2008/12/04(Thu) 16:51:37)

分類:[.NET 全般] 

こんにちわ、初めて投稿させていただきます。

DataViewでソートをさせているのですが
ASCでソートしていて、対象の列がNULLの場合その行が先頭にきてしまいます。
DBにpostgresqlを使用しているのですが、こちらでソート(ASCで)した場合はNULLの行は末尾にきています。
DBとそろえて末尾にしたいのですが・・・
DataViewでのソートの場合は無理なのでしょうか?
方法をおしりの方いらっしゃったら教えて下さい。

よろしくお願い致します。

Microsoft Visual Studio 2005
.NET Framework 2.0です。
引用返信 編集キー/
■29127 / inTopicNo.2)  Re[1]: DataViewのSortに関して
□投稿者/ Mr.T (297回)-(2008/12/04(Thu) 17:00:12)
Mr.Tです。
#DataViewとか使わないからよくわからないですが

No29124 (naanko さん) に返信
> こんにちわ、初めて投稿させていただきます。
>
> DataViewでソートをさせているのですが
> ASCでソートしていて、対象の列がNULLの場合その行が先頭にきてしまいます。
> DBにpostgresqlを使用しているのですが、こちらでソート(ASCで)した場合はNULLの行は末尾にきています。
> DBとそろえて末尾にしたいのですが・・・
> DataViewでのソートの場合は無理なのでしょうか?
> 方法をおしりの方いらっしゃったら教えて下さい。
>
> よろしくお願い致します。
>
> Microsoft Visual Studio 2005
> .NET Framework 2.0です。

DataViewはデータがどんなDBから取り出されているかしりませんから
これは目的のソート用の列をひとつ用意してみる、という方法はだめでしょうか。


引用返信 編集キー/
■29134 / inTopicNo.3)  Re[2]: DataViewのSortに関して
□投稿者/ やじゅ (828回)-(2008/12/04(Thu) 17:41:52)
やじゅ さんの Web サイト
> ■No29124 (naanko さん) に返信
>DataViewでソートをさせているのですが
>ASCでソートしていて、対象の列がNULLの場合その行が先頭にきてしまいます。
>DBにpostgresqlを使用しているのですが、こちらでソート(ASCで)した場合はNULLの行は末尾にきています。
>DBとそろえて末尾にしたいのですが・・・
>DataViewでのソートの場合は無理なのでしょうか?

DataViewは、NULLでも先頭にきます。
では、どうするかというと、対象のデータにソート用のダミー列を作ります。
NULLなら末尾に来るような(例 数値なら9999、文字ならzzzz などに変換した)データをセットする。

DataViewで、ソート用のダミー列を元にソートさせるようにします。
ってな方法で私は逃げてます。

引用返信 編集キー/
■29135 / inTopicNo.4)  Re[1]: DataViewのSortに関して
□投稿者/ カドルドエグ (57回)-(2008/12/04(Thu) 17:47:25)
No29124 (naanko さん) に返信
> こんにちわ、初めて投稿させていただきます。
>
> DataViewでソートをさせているのですが
> ASCでソートしていて、対象の列がNULLの場合その行が先頭にきてしまいます。
> DBにpostgresqlを使用しているのですが、こちらでソート(ASCで)した場合はNULLの行は末尾にきています。
> DBとそろえて末尾にしたいのですが・・・
> DataViewでのソートの場合は無理なのでしょうか?
> 方法をおしりの方いらっしゃったら教えて下さい。
>
> よろしくお願い致します。
>
> Microsoft Visual Studio 2005
> .NET Framework 2.0です。

DBの仕様によって、NULLを最大値とみなすか最小値とみなすかに左右されてしまうようです。

Postgresqlの場合:最大値
http://www.cgis.biz/others/postgresql/13/

Oracleの場合:最大値
http://www.ne.jp/asahi/hishidama/home/tech/oracle/sql.html#NULL

MySQLの場合:最小値 
※但し4.0.2 から 4.0.10 では、NULL 値が正しく処理されていないため、
 ソートが昇順か降順かに関係なく、常に先頭に表示 >リンク先の記事より
http://dev.mysql.com/doc/refman/4.1/ja/working-with-null.html

DataViewは……SQL Serverがベースなんですかね…
SQL ServerはNULLを「最小値」とみなすみたいなので。
http://www.cgis.biz/others/postgresql/13/


よって、Mr.Tさんややじゅさんと同じく、別途ソート専用列を設けるのがベストだと思います。
その際、NULL不可にしてしまうのが手っ取り早いかと。
引用返信 編集キー/
■29139 / inTopicNo.5)  Re[3]: DataViewのSortに関して
□投稿者/ みきぬ (274回)-(2008/12/04(Thu) 17:52:45)
No29134 (やじゅ さん) に返信
> DataViewは、NULLでも先頭にきます。
> では、どうするかというと、対象のデータにソート用のダミー列を作ります。
> NULLなら末尾に来るような(例 数値なら9999、文字ならzzzz などに変換した)データをセットする。
>
> DataViewで、ソート用のダミー列を元にソートさせるようにします。
> ってな方法で私は逃げてます。
>
ほとんど同じ考え方ですが、
・ダミー列を追加して、Null なら 1, 非Null なら 0 を入れておく
・ダミー列、もともとソートしたい列 の順にソートする
という手もあります。
ダミー値をどうするか気にせずにすむのが利点。ただ用途によっては使えないかも。
引用返信 編集キー/
■29140 / inTopicNo.6)  Re[1]: DataViewのSortに関して
□投稿者/ 魔界の仮面弁士 (935回)-(2008/12/04(Thu) 17:56:01)
No29124 (naanko さん) に返信
> DataViewでのソートの場合は無理なのでしょうか?

式列を作ってみては如何でしょう。

たとえば、DataTable の F1 列が Short 型だとして…NULL を末尾にするために

table1.Columns.Add("F1_SORT", GetType(Decimal), "ISNULL(F1, 9999999999999)")
 Dim dataView1 As New DataView(table1)
 dataView1.Sort = "F1_SORT ASC"

とか。(VB.NET) 
引用返信 編集キー/
■29147 / inTopicNo.7)  Re[2]: DataViewのSortに関して
□投稿者/ やじゅ (831回)-(2008/12/04(Thu) 18:35:38)
やじゅ さんの Web サイト
No29140 (魔界の仮面弁士 さん) に返信
> table1.Columns.Add("F1_SORT", GetType(Decimal), "ISNULL(F1, 9999999999999)")

ISNULLってあるんですね。

DataColumn.Expression プロパティでいいのかな?
http://msdn.microsoft.com/ja-jp/library/system.data.datacolumn.expression(VS.80).aspx
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -