• ベストアンサー

SQL初心者です。

SQL初心者です。 3項目が一致した重複データを省きたい。 テーブルAには 誕生年 名前 年齢 が 入っていて 誕生年、名前、年齢が同じレコードははぶきたいのですが、 どのように書いたらいいでしょうか。 Windos XP 言語:vbs DB Micosoft Sql server 2008

  • obone
  • お礼率51% (111/215)

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

誕生年、名前、年齢が同一で住所がことなる場合はどのレコードを取得するのでしょうか? たとえば、 誕生年|名前|年齢|住所|・・・ S34 |山田|24|大阪 S34 |山田|24|大阪 S34 |山田|24|大阪 S34 |山田|24|東京 というデータの場合は大阪と東京のどちらを取得するかの条件は決まっていますか? そんなデータは存在しないというならば、row_number関数を使って select 誕生年,名前,年齢,住所 from (  select 誕生年,名前,年齢,住所      ,row_number() over(partition by 誕生年,名前,年齢 order by 住所) row_num  from テーブルA ) where row_num = 1; とかでもいいかと思います。

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms186734.aspx
obone
質問者

お礼

ありがとうございました。 いろいろ試してみます。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

画像が見られませんが・・ 重複を除外するにはdistinctすればいいです。 select distinct 誕生年,名前,年齢 from テーブルA とすると誕生年、名前、年齢が同一のレコードが複数件あっても1件だけ取得できます。

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms187831.aspx
obone
質問者

補足

説明不足で申しわけありません。 画像はUPしたのですが、システムエラーでなんどやっても上手くいきませんでした。 取り出したい項目と重複除外の項目が一致していればいいのですが 重複チェックは誕生年,名前,年齢で取り出したい値が誕生年,名前,年齢,住所の場合 エラーになるのでdistinct を使わない方法ないでしょうか。 テーブルA 誕生年|名前|年齢|住所|・・・ S34 |山田|24|大阪 S34 |山田|24|大阪 S34 |山田|24|大阪 S32 |山下|21|大阪

関連するQ&A

  • SQL初心者です。ご教授願います。

    SQL初心者です。ご教授願います。 テーブルAとテーブルBの比較をしたいと思っています。 比較するのは、全項目(もしくは、特定の項目でもかまいません)です。 どなたか、SQLのアドバイスをお願いします。  条件   ・DB: Microsoft SQLserver2000   ・テーブルAとテーブルBの項目は同じ(コピーして作られたもの)です。   ・比較は全項目です(キー項目の有無も含まれます)。   

  • oracleのSQLパフォーマンスについて

    oracleのSQLパフォーマンスについて質問です。 当方、SQLは初めてで、ずぶの素人ですが、SQLパフォーマンスを改善することになりました。 質問の仕方も悪いとは思いますが、お力添えをいただきたいと思います。 【質問1】 DBのレコード件数は、SQLパフォーマンスにどう影響するでしょうか?以下例のようなことが知りたいです。 例1 INDEXのないテーブルに対しSQLを発行する場合、レコード件数の多いDBとレコード件数の少ないDBでは、レコード件数が少ない方が、パフォーマンスが良い? (前提として、検索対象DBは、レコード件数以外に差がないとする) 例2 WHERE句にINDEX項目を使用した場合、DBのレコード件数はパフォーマンスに影響しない (前提として、アクセスパスは適切で、検索対象をうまく絞り込むことができる) 例3 WHERE句にINDEX項目を使用したSQLをレコード件数の多いDBに発行する場合と、WHERE句にINDEX項目がないSQLをレコード件数の少ないDBに発行する場合では、どちらがパフォーマンスがよいのか (前提として検索対象DBは、レコード件数以外に差がないとする) 【質問2】 INDEXをDBに追加すると、INSERT、UPDATE、DELETEの際に、どのくらい影響するのでしょうか? 対象のDBは、5項目あり、400万件くらいのレコードがあります。また、複合項目(2項目)のプライマリキーと、単一INDEXがついており、新たに3項目の複合INDEXを追加しようとしています。 以上、よろしくお願いいたします。

  • access・複数のテーブル・重複除外したデータ

    accessで複数のテーブルで重複しないレコードだけを抽出するSQL文を知りたいです。 フィールドは多数あり、「フィールドの内容が全て一致するレコード」以外のレコードを 重複しないレコードとして抽出したいと思っています。 テーブルは3つ以上ありますが、2つのテーブルで実行するSQL文でかまいません。

  • 複雑な抽出条件のSQL文

    まだまだ初心者ですがよろしくお願いします。 以下の条件でDBからデータを抽出したい場合のSQLを 教えていただきたいです。 ・テーブルAがありカラムがA、Bとある。 ・Aは重複できないようになっているがBは重複可。 ・Bが重複しているレコードのAの値が欲しい。 環境はSQLServer2000+VB6.0です 情報が足りないかも知れませんがよろしくお願いいたします。

  • SQLについて

    レコード1 |レコード2 |レコード3 AAA |1111 |0000 BBB |1111 |0000 CCC |2222 |2222 CCC |3333 |2222 CCC |4444 |2222 上記のようなテーブルがあった場合、レコード1のAAAとBBBは値をそのまま抽出し レコード1のDDDはレコード2とレコード3の値が一致しているものを抽出したいのですが ひとつのSQLで実現することは可能でしょうか? レコード2とレコード3の値が一致しているものを抽出だけなら簡単にできそうなのですが AAAとBBBもというところで悩んでます。どうかご教授ください。

  • SQL初心者です。

    【Table1】 Col1 Col2 Aa A Ab A Ba B Bb B Ca C Ca D 【Table2】(Data1は固定) Data1 Data2 Aa A Ab B→A Ba C→B Bb A→B Ca B→C Ca C ※Col1に重複がある場合、重複結果の1行目のレコードをData2に入れる (今回の場合CをData2に入れる) Data1は固定で、Table1を使ってData2を上記の様に修正するSQLが書けなくて困っています。 Col1が重複してない場合の修正するSQLを書いてみましたが(合っているかはわかりませんが...)、 重複する場合のSQLも追加して最終的に1つのSQLで、すべて修正できるようにしたいです。 update Table2 T2  set Data2=  (select Col2 from Table1  where Col1=   (select Col1 from Table1 T1   where T2.Data1=T1.Col1   group by T1.Col1   having count(T1.Col1)=1  ) ) わかりにくい部分もあると思いますが、ご教授お願いします。

  • SQLで日付の更新は?

    DBの初心者です。 DBはAccess。 日付の項目のレコードを更新したいのですが SQLではどうかけばいいのでしょうか? レコードは複数です。 更新パターン1  年を一括で2003から2004に変更する   2003/06/20 → 2004/06/20 更新パターン2  現在のレコードの内容の日付を10日後に変更する  2003/06/20 → 2004/07/01 よろしくお願いします。

  • diffに相当するSQL文

    SQLを書けなく困っています。お願いします。 「社員住所2007年」と「社員住所2006年」まったく同じ項目のテーブルがあるとします。社員数は多少増減します。 二つのテーブルを比較し、2007年の変わったレコードの変わった項目だけを取り出したいんです。 お願いいたします。

  • SQL文です。フラグがオンの率を出したい。

    あるテーブルに、0か1かが入るフラグとして用いる項目があるとします。 そのテーブル全体のレコード数の内、フラグがオン(=1)のレコードは何%かを出すなら、どのようなSQL文になるでしょうか? SQL Server(2012あたり)です。 よろしくお願いします。

  • SQL文について

    こんにちは! 皆様に教えて欲しいことがあります。 DBの中のデータで、一番年齢が高い人の名前を取得してくるときってどんなSQL文を書けばいいんでしょうか? 一番高い年齢を取得、なら select Max(年齢) from DB でいいと思うんですけど、一番年齢の高い人の名前、となると、どうやってとってくるのかわかりません。 where文で「having max(年齢)」ってやったんですけど、エラーが出て実行できませんでした。 今作ってるSQL文は、DB二つから他の条件も含めてselectしているので、他の理由でエラーになってるのかもしれませんが・・・。 職場にSQLがわかる人がいないので、誰にも聞けません。 もしわかる方がいらっしゃいましたら、教えてください。 宜しくお願いします。