• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1列について重複している行を除くかつ,他の列の値で抽出する行を変えたい場合)

SQLServerを使って重複行の削除と条件に合致する行を抽出する方法

このQ&Aのポイント
  • SQLServerを使用して、指定の条件に基づいて重複行を取り除き、特定の条件に一致する行を抽出する方法を教えてください。
  • 表1のA列の重複行を削除し、B列の値が「5よりも4」、または「4よりも1」、または「1よりも2」、または「2よりも3」の行を抽出する方法を教えてください。
  • もし、B列の値が「5>4>3>2>1」の順番であれば、MAX関数を使用して取り出せますが、B列の値が「3>2>1>4>5」の場合、どのようなSQL文を書けば良いでしょうか?

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

例を2つ示します(ROW_NUMBERはSQL Server 2005以降)。 SELECT DISTINCT A,B FROM 表1 a WHERE B IN (SELECT TOP 1 B FROM 表1 WHERE A=a.A ORDER BY (CASE B WHEN 3 THEN 1 WHEN 2 THEN 2 WHEN 1 THEN 3 WHEN 4 THEN 4 WHEN 5 THEN 5 ELSE 99999 END)) SELECT A,B FROM (SELECT A,B, ROW_NUMBER() OVER (PARTITION BY A ORDER BY (CASE B WHEN 3 THEN 1 WHEN 2 THEN 2 WHEN 1 THEN 3 WHEN 4 THEN 4 WHEN 5 THEN 5 ELSE 99999 END)) SEQ FROM 表1) tmp WHERE SEQ=1

pet5752
質問者

お礼

2つの例のうち上のSQL文を使い,抽出することができました. ご丁寧な回答ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの行の中で値が重複しているものを抽出したいのですが。

    基本的なことなのかもしれませんが、とても困ってまして、 教えていただけると幸いです。 以下のような表がある場合に、 3行目と4行目のように複数列で重複している行を 抽出したいのですが、どうすればよいでしょうか。 ※配列は変わらないので、横の行が全く同じもの だけを識別する必要がありまして。 A列 | B列 | C列 ---------------------- aaa |あああ |アアア ---------------------- bbb |いいい |イイイ ---------------------- ccc |ううう |ウウウ ---------------------- ccc |ううう |ウウウ ---------------------- ddd |えええ エエエ ---------------------- eee |おおお オオオ 教えていただけると助かります。 何卒、よろしくお願いいたします。

  • 1列について重複行を除いて全列をSELECTするSQL文

    A B C 1 2 10-01 2 3 10-01 3 2 10-02 4 1 10-03 5 3 10-04 MYSQLで上のようなTABLEから、B列についてCが最新の日付の行を1行ずつ、且つ全列抽出したいです。想定する結果は下記の通りです。 3 2 10-02 4 1 10-03 5 3 10-04 SELECT DISTINCT A FROM table_name ORDER BY C DESC だとB,C列は抽出されず、DIATINCT A,B,Cだと全行抽出されてしまう。 GROUP BY B は平均や集計なら使えるでしょうが最新の1行でないし。 どんなSQL文にすれば良いのでしょうか。よろしくお願いします

    • ベストアンサー
    • MySQL
  • エクセルで重複しないものだけを抽出したい

    下記のようなデータがあります。 A B C D 1 20 30 40 1 20 32 41 1 20 30 49 1 20 81 39 2 20 76 40 2 20 32 41 2 20 30 49 3 20 81 39 3 20 39 40 3 20 32 41 4 20 30 49 4 20 81 98 このうち、列Aの他と重複しない部分であり、かつ先頭行を抽出するにはどのようにしたらよいでしょうか? 上記の例で言うと、列Aの1から4までのそれぞれ1行目を選ぶという作業です。 抽出後 A B C D 1 20 30 40 2 20 76 40 3 20 81 39 4 20 30 49 vlookupなどの関数でできるのでしょうか?教えてもらえたらうれしいです。お願いします。

  • 重複データの抽出

    重複した数字のデータを抽出してまとめたいのですが教えていただけないでしょうか? 例えば A列    B列   1245     1365     1245 1398 1365 1155 1245 この表を      A列    B列   1245    1245 1365    1365 1245    1398 1398    1155 1365 1155 1245 のようにまとめたい A列の重複したデータを抽出しB列にまとめたいのですが、なるべく関数でやりたいのですが、良い方法をお願いいたします。

  • エクセルマクロで重複数値と以外の数値を抽出する

    数値の表を作成しておりますが、 重複数値で困っております。マクロで教えてください。 A列11~20まで1.2.2.4.5.6.6.8.9.10とあるデータに 2と6が重複しています 重複数値2.6をB列2行目以降に、C列2行目以降にはそれ以外の1.4.5.8.9.10 を抽出したいのですが、マクロで教えてください。 (offsetを使ってできますか?) また、重複数値を抽出する自作関数ってできるでしょうか? よろしくお願いいたします。

  • エクセルマクロ重複した列を削除した結果を抽出したい

    お世話になります。 各行で、重複したセルを除いた文字列を結合してA列へ表示させたいのですが、全然わからず困っています。宜しくお願い致します。 【抽出前】 セルB2:あいうえお セルC2:かきくけこ セルD2:さしすせそ セルE2:あいうえお セルB3:たちつてと セルC3:らりるれろ セルD3:たちつてと         ・         ・         ・ 【抽出後】 ※重複した部分を除いた抽出結果を、A列に表示させたい セルA2:あいうえおかきくけこさしすせそ セルA3:たちつてとらりるれろ         ・         ・         ・ 【補足】 ※列数は決まっていません。値が入っているところ迄、となります。例では最長E列迄になっておりますが、もっと長い場合もあれば、B列だけの場合もあります。 ※行数は、数100行あります。こちらも値が入っているところ迄、抽出結果をA列のA2から順番に表示させたいです。

  • SQLでの複数列が重複してる行の削除(SQLite)

    こんにちは。 複数の列で重複した列がある場合の行削除のクエリが思い付きません。 A表 A    B   C   D   ==== === === ==== 1 ああああ 100 200 ABCD 2 いいいい 200  90 ASKB 3 うううう 300 800 ALTE 4 ええええ 400 200 ABCD B表   ==== === === ==== 1 ああああ 100 200 ABCD 2 ああああ 400 100 ABCD このとき、A表とB表を比較し、B,C,D列で重複したデータをB表から削除した行を表示したいのです。 ほしいデータは B表   ==== === === ==== 2 ああああ 400 100 ABCD です。よろしくお願いします。

  • Excel2003での行重複削除

     Excel2003で、列のセル内容が同一の場合を削除・抽出することは可能でしょうか。例えば、次のようなイメージです。 行番号 A列 B列 行1 A1県 B1市 行2 A1県 B2市 行3 A1県 B3市 行4 A1県 B4市 行5 A2県 B5市 行6 A2県 B6市  ここから、A列が同一の行の重複を削除したいのです。上記では、行1から行4までは「A1県」で同一なので、1つの行だけ残し後の行は削除したい。B列の内容は重複削除で一部消えますが構いません。上記の場合、抽出結果は次のようになります(先頭行だけ残した場合ですが)。 行番号 A列 B列 行1 A1県 B1市 行5 A2県 B5市  データベースが大きいため、手作業で削除して行くのは大変です。適当な方法がありましたら、是非、ご教示ください。  どうぞ宜しくお願いします。  

  • 列を行に表示する方法は?

    できればSQL文で作りたいと思っています。 表1 行1 行2 == == 1  A 1  B 1  C 2  A 2  D 行1で同一の値のものは10個しかないと決まっています。 (つまり行1=1のものは10列まで) これを次のように表示したいと思っています。 行1 行2 行3 行4 == == == == 1  A  B  C 2  A  D Access+SQL*Serverを使っています。このようなViewをつくるSQLが発行できればベスト。関数とか使ってでもなんとかできないでしょうか? SQLの実行結果のレコードを順番に配列に入れるとかしかいと無理でしょうか? レコード結果はFirst,Lastを使って先頭と最後だけは取り出せるのですが、2番目~9番目も取り出す関数があったら、それをSQLに組み入れるだけで済むのですが。 どうぞ、よろしくお願いします。m(○)m

  • エクセルでA列B列C列の重複するレコードのみを表示

    エクセルのA列とB列とC列で重複するレコードのみを抽出して別の列に表示させたい。 エクセルのA列とB列とC列にそれぞれ1000行くらいのデータがあります。 それぞれの列内には重複レコードがあります。 この条件の中で 「A列とB列とC列に重複するデータすべて」 を抽出したいのですが、どんな方法がありますか。 抽出されたデータで重複レコードの場合は1件のみで表示したいです。 よろしくお願いします。 例   A   B   C   抽出  1-001-002--002--002 2-002-002--005--007 3-003-007--007--008 4-007-008--008--011 5-008-008--010 6-008-010--011 7-011-011--012 8-013-014--013