- - PR -
selectでの重複行を表示しない(ソートなし)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-28 17:15
tableA
--------- 33a 22a 22a (null) 11a 11a 上記の様なテーブルがあった場合 33a 22a (null) 11a というような結果を得たいのですがselect文だけで可能でしょうか? グループ化してもdistinct付きで実行しても並び替えられてしまいます。 ストアドでカーソル使ってループさせるしか方法ないのかな? (環境 SQL Server2000 SP3) |
|
投稿日時: 2005-06-28 17:27
select tableA from テーブル名 group by tableA order by tableA desc;
ではなくて? >グループ化してもdistinct付きで実行しても並び替えられてしまいます。 これの意味がちょっとわからないのですが。。。 何か基本的な勘違いをしているのでしょうか? もしかして、ソート後の Null の位置??? |
|
投稿日時: 2005-06-28 17:34
なぜソートされては困るのかがよく分かりません。
仮にA、B、Cの順にレコードをインサートしたからといって、A、B、Cの順に返って来るとは限りませんよ。 |
|
投稿日時: 2005-06-28 17:36
ええと
テーブルに入ってる順番のまま先詰めで重複行を消せないかなと思いまして。 今の例ですと テーブル名 tableA フィールド名 col1 とすると select distinct col1 from tableA select col1 from tableA group by col1 どちらも結果は (null) 11a 22a 33a となります それを、テーブルに入ってる順に詰めて 33a 22a (null) 11a という結果を得たいと思います。 |
|
投稿日時: 2005-06-28 17:44
>なぜソートされては困るのかがよく分かりません。
そう言われるとそうかも・・・ 今回はロジック上どうしても必要なので シーケンス番号(seqkey1)フィールドを作成して select col1 from tableA group by col1 order by min(seqkey1) こんな感じでやってみようと思います ありがとうございました。 |
|
投稿日時: 2005-06-28 17:45
こんにちはー。
group byとdistinctはその処理を行なうために自動的に並び替えが行なわれます。 ですからこの二つを使用すると確実にソートは行なわれてしまうことになります。 そのためソートしたくない場合、この二つは使用できないことになると思います。 別にキーや更新履歴でもない限り、入っている順、というのは難しい気がします。 <追記> すみません、記入時に先に締められていたようです。 失礼しました。m(__)m [ メッセージ編集済み 編集者: 天 編集日時 2005-06-28 17:46 ] |
|
投稿日時: 2005-06-28 17:51
ありがとうございます
OracleだとROW ID列を使用する事でキーなくてもできそうですね |
|
投稿日時: 2005-06-28 17:54
こんばんわ。
なんかちょっと気になる終わり方ですが、 Close されたという事で安心しました。 と、いうか激しく勘違いをしていました。 < 自分 申し訳ないです。 お邪魔しました。 |
1