- PR -

重複を取り除きたいです。(SQLServer2000)

1
投稿者投稿内容
あやこ
会議室デビュー日: 2005/10/13
投稿数: 13
投稿日時: 2006-02-08 15:45
こんにちは。
初心者の質問ですみません。
特定の列で重複している値がある場合に、最初の1行だけを取り出すようにしたいと思っています。
列1 列2 列3
1  AA A1
1  BB A2
2  CC A3
3  CC A4
3  DD A5
4  EE A6

列1で重複している場合は、最初の1行だけを取り出して、

列1 列2 列3
1  AA A1
2  CC A3
3  CC A4
4  EE A6
のように取り出したいのです。
列1の値を取り出すだけでしたら、distinctやgroup byでいいのでしょうが、
行単位で取り出そうと思うと、わからず、困っています。
ご存知の方がいましたら、どうかご教授下さい。
よろしくお願い致します。




[ メッセージ編集済み 編集者: あやこ 編集日時 2006-02-08 15:47 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-08 16:19
引用:

あやこさんの書き込み (2006-02-08 15:45) より:

列1の値を取り出すだけでしたら、distinctやgroup byでいいのでしょうが、
行単位で取り出そうと思うと、わからず、困っています。


???

DISTINCT キーワードを列 1 に指定して、GROUP BY ではなく ORDER BY を使うのでは?
全フィールドに DISTINCT を付ける必要はないでしょう?

もしかして、集計がてらやろうとしている?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-02-08 16:57
こんにちは

たぶんSQLでは出来ないんじゃないですかね?
SQLは集合を扱う言語(?)ですから。

やるとしたら、fetchしながら、前のキーと同じだったら飛ばす処理を
入れて処理すれば簡単に出来ると思います。
コード:

recordset = execsql("〜SQL〜");
var before_key = "";
while(rowdata = fetch(recordset)){
if (rowdata[列1] == before_key){
continue;
}
before_key=rowdata[列1];
〜処理〜
}


な感じじゃないですかね?
仮想言語でアルゴリズムだけ書いてみました。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-02-08 16:59 ]
Desmo
大ベテラン
会議室デビュー日: 2004/03/24
投稿数: 149
投稿日時: 2006-02-08 17:23
表示列が、列1と列2しか無いならば、乱暴な方法ですが

SELECT 列名1, MIN(列名2)
FROM 表名
GROUP BY 列名1;

でも取得できますが・・・
副問合せが可能なRDBMSならば、上記との組み合わせで出せるかも!?
Hs
会議室デビュー日: 2004/06/25
投稿数: 10
お住まい・勤務地: 大阪
投稿日時: 2006-02-08 17:27
こんにちは。

他にユニークな値の列が存在し、
最初の1行というのがそのユニーク列の値が最小のレコードという事で良い。
とか他の条件(状況)がもう少し判ればできるかも。

ちなみに上の条件であれば
コード:

  SELECT 列1,列2,列3 
    FROM テーブル1
   WHERE ユニークキー列 IN (SELECT MIN(ユニークキー列) 
                             FROM テーブル1 
                         GROUP BY 列1)
ORDER BY 列1


こんなので一応できると思いますが。。。
1

スキルアップ/キャリアアップ(JOB@IT)