• ベストアンサー

SQL書けますか?

field1,field2がありまして、データが4件あるとします。 データの内容はそれぞれ、 1,B 2,C 3,A 4,B が入っています。 この時selectで 1,B 4,B 2,C 3,A と言う順番で取ってきたい場合どのように書けばいいのでしょうか? field1の昇順が基本だけど、field2が同一の場合優先順位関係なしに連続して表示したいんです。 よろしくお願いします。

  • Oracle
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.2

>Field1が同値だった場合、同値のものが間に入り込んでしまうんですが対処法は何かありますでしょうか? 言ってることがよくわからないけど・・ select T1.* from T T1,(select Field2,min(Field1) skey from T group by Field2) T2 where T1.Field2=T2.Field2 order by T2.skey,T1.Field2,T1.Field1; なり select Field1,Field2 from (select T.*,min(Field1) over(partition by Field2 oder by Field1) skey from T) order by skey,Field2,Field1; で良いのでは? 違うのであれば、どういうデータをどう表示したいか具体的に書いてください。 サンプルにない、説明に出てこない要素は対処のしようがありません。

yamadachan
質問者

お礼

ありがとうございます。 k_o_r_o_c_h_a_nさんの回答をヒントに色々試してたら出来ました。

その他の回答 (1)

回答No.1

select T1.* from T T1,(select Field2,min(Field1) skey from T group by Field2) T2 where T1.Field2=T2.Field2 order by T2.skey,T1.Field1; とかで良いかと思います。 分析関数が使えるなら・・ select Field1,Field2 from (select T.*,min(Field1) over(partition by Field2 oder by Field1) skey from T) order by skey,Field1; の方が効率が良いですけどね。

yamadachan
質問者

補足

回答ありがとうございます。 Field1が同値だった場合、同値のものが間に入り込んでしまうんですが対処法は何かありますでしょうか?

関連するQ&A

  • AccessVBA SQLのWHERE句について

    こんにちは! テーブルAのBフィールドの中に以下のデータがあるとき(昇順です) 1,2,5,6,12.... 3という数値を得たいです。 3,4がフィールドに含まれる場合は、7です。 数字がバラバラなので、データを新規追加した時に穴埋めをしていきたいのです。 データの登録した順番は関係ないものとして、どのように実現できますでしょうか? ORDERでデータを取ってきて、ループするしかないのでしょうか・・・? 特殊な例ですみませんが、宜しくお願い致します。

  • SQL詳しい方、助けてください。

    こんにちは。 UPDATE テーブルA SET フィールドA1 = '1' WHERE フィールドA2 =(SELECT フィールドB1 FROM テーブルB WHERE フィールドB2 = 'C0' OR フィールドB2 = 'C2' AND フィールドB3='') AND フィールドA3 = '' AND フィールドA4 <> '' というSQLを作成して、動作していたので安心していたら、 テーブルBのレコード数は1件のみだと思っていたら、複数存在する場合があるとのことで、 テーブルBのレコードを追加してみたところ、、 【サブクエリは複数の値を返しました。サブクエリが = 、!= 、<、<= 、>、>= のあとに続く場合や、 サブクエリが 1 つの式として使われる場合に複数の値は許可されません。】 というエラーで終了するようになってしまいました。 そこで、 UPDATE テーブルA AS A INNER JOIN テーブルB AS B ON A.フィールドA2 = B.フィールドB1 SET A.フィールドA1 ='1' WHERE B.フィールドB2 = 'C0' OR B.フィールドB2 = 'C2' AND B.フィールドB3='' AND A.フィールドA3='' AND A.フィールドA4 <> '' としてみました。 なんだか混乱してきて、結合条件があっているかが 自分でもよくわかんなくなっていますが。 しかも、 上記のSQLをSQL SERVER 2000のクエリアナライザで 実行すると、 【キーワード 'inner' 付近に正しくない構文があります。】 というエラーが・・・。 INNER 以下はいろいろおかしいんだろうな・・・と 思っていたのですが、まさか、そんなしょっぱなで引っかかるとは思いませんでした。 いろいろ、記述方法を変更してみたり、考えたんり したんですけど、情けないことにさっぱり解りません。 どなたかお力をお貸しください。 お願いします。

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • SQLのbetweenについて

    現在SQLを勉強しています。 C♯とSQLServerを使用しているのですが betweenを使って困った点があります。 自分で入力するAとB(どちらも数字)をbetweenの条件にしていしているのですが 例) select フィールド名 from テーブル where フィールド名 between A and B; → テーブルのフィールド名 の中のAからBのデータを選択する は問題ありません。 ですがAとBが未入力だとエラーが当然でてしまいます。 そこで未入力だとフィールド名の中を全件selectするようにしたいのですが、これはbetween で出来るのでしょうか? おそらくは条件であれこれ指定するのだと思いますが… 回答お願いします

  • SQLの書き方について教えてください。

    SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています

  • SQL の抽出方法

    あるテーブルABC に項目aとbとc があるとします。 今、抽出の条件が 仮にa=1,b=2 として、 この条件で複数件のデータが抽出され その中からcが最大のデータ1件のみを抽出するとします。 このSQLを作成する場合、 どのような方法がありますでしょうか? select文で、1度cのmax値を求めないといけないでしょうか?

  • エクセルで名簿作成中、名前順に並べ変える方法を教えて下さい。

    エクセルにて約15、000件分(同世帯含む)の名簿作成中です。 町別にシートは作成しており、各町ごと姓(世帯ごと)を「あいうえお順」(昇順)にして作成したいのです。 ツールバー→データ→並べ替えを選択し、優先順位をAフリガナ、B住所、C電話番号として並べ替えをしたところ、例えば、同じ町内に姓が「斉藤」という世帯が何件もいた場合、優先順位の一番をフリガナにしている為、姓は斉藤でも名前のフリナガナが早い順で並べ替えになってしまい、どうしても世帯ごとの昇順にならないのです。町によっては500件近い場合もあり、確認するだけで時間がかかっております。 もし、何か解決方法があれば、どなたか是非教えて下さい。よろしくお願い致します。

  • SQL 複数のテーブルから重複なしでデータを取得

    同じフィールド名[名前]を持つテーブルが複数個あります。 仮にテーブル名を、A、B、C、Dの4個だとします。 それらのテーブルから、フィールド名[名前]のデータを重複なしで取得したいのですが、SQL文が思いつきません。 取得するフィールドは[名前]だけです。 select distinct(名前) from A union select distinct(名前) from B union select distinct(名前) from C union select distinct(名前) from D だと、各表に同じ名前が存在する場合は結果も重複してしまい、期待する結果が得られませんでした。 環境はOracle 9iです。 SQL文を教えてください。よろしくお願いします。

  • COBOLの動的SQLについて

    COBOLにおいて、動的にSQLを組みたいのですが、 取得する方法も含めてご教授願いませんでしょうか? 例) 条件により コード=1の場合、 SELECT A.ID,B.NAME FROM ID A,NAME B コード=2の場合、 SELECT A.ID,B.NAME,C.ADDRESS FROM ID A,NAME B,ADDRESS C のように条件により取得する項目も数もテーブルも違います。 この場合でのSQLの組み方とデータを取得する(FETCHの方法)がわかりません。 また、取得する件数も1件ではありません。 よろしくお願い致します。

  • 3テーブルより抽出のSQL文

    3テーブルよりを以下の条件で1つのSELECT文で抽出したいのですが可能でしょうか?  ・C_TBLのDATEが2007のデータ〔SUBSTR(DATE,1,4)='2007'を使用?〕  ・A_TBLのCORPがcorp1のデータ(あいまい検索)  ・CORP(昇順)、DATE(降順)、ITEM(昇順)でソート ・表示カラムは、CORP・DATE・ITEM・SURYO・TANKAです <<A_TBL>>   <<B_TBL>>         <<C_TBL>> A  CORP    B  A  ITEM TANKA   C  A  B   DATE  SURYO a01 corp11   b01 a02 item03 10   c01 a03 b06 2007-11-01 100 a02 corp13   b02 a03 item01 20   c02 a01 b03 2007-12-01 200 a03 corp11   b03 a01 item03 10   c03 a05 b04 2007-11-01 100 a04 corp05   b04 a05 item02 30   c04 a01 b05 2007-11-01 300 a05 corp13   b05 a01 item02 30   c05 a03 b06 2007-12-01 200            b06 a03 item03 20   c06 a01 b05 2007-11-02 100            b07 a01 item01 10   c07 a03 b02 2007-11-01 500 また、以下の条件で集計を1つのSELECT文で行えますか? 現在は、C_TBLとB_TBLで集計抽出し、A_TBLの対象データを抽出し、2つの配列より・・・ というロジックを組んでいます。  ・C_TBLのDATEが2007のデータ〔SUBSTR(DATE,1,4)='2007'を使用?〕  ・A_TBLのCORPがcorp1のデータ(あいまい検索)  ・CORP(昇順)、DATE(降順)でソート ※DATEは年月のみです  ・CORP、DATE(年月)毎で金額を集計〔SUM(C_TBL.SURYO*B_TBL.TANKA) AS KINGAKU〕 ・表示カラムは、CORP・DATE・金額です 宜しくお願い致します。

    • ベストアンサー
    • MySQL