• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:並べ替えについて)

初心者のためのdb並べ替えの方法

このQ&Aのポイント
  • 初心者でも分かりやすくdbを並べ替える方法をご紹介します。
  • 具体例を交えてdbの並べ替え方法を解説します。
  • 別テーブルへの効率的な並べ替え方法をご紹介します。

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

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

お世話になります。 データベースが何を使っているかに寄りますが、 SQL Server 2005 だと、PIVOT なるものがあります。 [SQLServerで複数行を1行にしたい。] http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30707&forum=26&7 [PIVOT と UNPIVOT の使用] http://msdn2.microsoft.com/ja-jp/library/ms177410.aspx

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

関連するQ&A

  • テーブルの並び替え

    仕事であるdbを使って集計をすることになったのですが、なにぶん初心者なので分りやすくdbを並べ替えたいのですが、うまくいきません。 たとえば 主キー ID  code1 code2 222 33 あ   B  222 33 う   c  225 66 あ   c 239 77 か   B 239 77 う   d となっているものをテーブルを 主キー ID codeA codeB codeC codeD 222 33 あ   B  う c 225   66 あ   c 239   77 か   B  う  d と別テーブルへ並べ替えたいのですが、どのように 書いたらいいものか・・・。 どなたか教えてくれませんでしょうか?

  • こういうビューを抽出したいのですが...

    こういうビューを抽出するSQLを書きたいのですが、わからず困っています。 TableA (主キー:ID)  ID│CodeA ──┼───── 0001│123 0002│234  :│: TableB (主キー:ID)  ID│CodeA │CodeB │Name ──┼───┼───┼───   1│123  │A1  │XXX   2│123  │B1  │YYY   3│123  │C1  │ZZZ 欲しい抽出結果 (CodeBとNameは1行に最大5回まで存在しうる)  ID│CodeA │CodeB1│Name1 │CodeB2│Name2 │CodeB3│Name3 ──┼───┼───┼───┼───┼───┼───┼─── 0001│123  │A1  │XXX  │B1  │YYY  │C1  │ZZZ こういうのってSELECT文だけで記述できるのでしょうか? どのように記述すれば良いでしょうか?

  • ORACLE 効率の良いDB設計について

    複合キーとはこういう時に使うのでしょうか? テーブルが2つあるとします。 テーブルAは、CODE テーブルBは、CODE1,CODE2,NAME とします。 テーブルAの"CODE"とテーブルBの"CODE1"+"CODE2"をキーに テーブルBの"NAME"を取得する場合。 たとえばテーブルAのCODEに"A1B1"という値が入っていて テーブルBのCODE1,CODE2の値にそれぞれ、"A1"、"B1"が入っている場合、テーブルBの主キーはCODE1とCODE2の二つにした方が効率がいいですか? select テーブルA.code,テーブルB.name from テーブルA,テーブルB where テーブルA.code = テーブルB.code1 || テーブルB.code2 ↑あっているかちょっと自信がないですが こういった処理をしたいと思っています。 よろしくお願い致します。

  • レコード集計のSQLについて

    お世話になります。 SQL Serverに関する質問です。 以下の内容を満たすSQLを作成したいのですが、 方法がわからず困っています。 (内容) *************************************************************** ・Aテーブル、Bテーブルには、以下のレコードが格納されています。 [Aテーブル] | key_code | code1 | code2 | code3 | money | person | ← カラム名 ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- | 001 | 1 | 2 | 1 | 3000 | 10 | ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- [Bテーブル] | key_code | cd1 | cd2 | cd3 | cd4 | cd5 | ・・・・・ | cd10 | ← カラム名 ------------------------------------------------------------ | 001 | 01 | 02 | 10 | 30 | 51 | ・・・・・ | 90 | ------------------------------------------------------------ | 002 | 01 | 02 | 03 | 10 | 40 | ・・・・・ | 55 | ------------------------------------------------------------ ・Aテーブルの key_code とBテーブルの key_code を関連付けて、  Bテーブルのcd1~cd10に格納されている各コード単位に集計した  Aテーブルのmoney及びpersonの値を取得したい。  例えば、 key_code = '000' でAテーブルとBテーブルを関連付けして、 Bテーブルのcd(1~10) = '10' で集計した Aテーブルの money と personの 値を求めたい。 **************************************************************** 初歩的な質問で申し訳ございませんが、 どなたかご教授願えませんでしょうか? よろしくお願いいたします。

  • こういうデータの並べ替えってできるのでしょうか?

    データベースについて疎いもので、どうしていいものか分かりません。 例えば、 |A|あ| | | | |B|あ|い| | | |C|あ|い|う| | |D|あ|い|う|え| というテーブルを |あ|A|B|C|D| |い|B|C|D| | |う|C|D| | | |え|D| | | | という風に並べ替えたりできないのでしょうか? データは全てテキスト型なので、クロス集計もできないのかな、 と思い、途方にくれております。どなたか、こんな方法がある、 というのがございましたら、ご教授願います。    

  • Oracle[10g]のSQL文について。(新No.3)

    なんども、恐縮です。 Oracle[10g]のSQL文についての質問です。(新No.3) 実は、JOINが多くてどこに[ROW_NUMBER]を入れれば良いのか解りません。 [A]テーブルに [CODE](KEY) [CODE2] のフィールドがあります。 A-1 B-1 A-2 B-2 A-3 B-3 [A2]テーブルに [CODEB](KEY) [CODE2] のフィールドがあります。 AA-1 B-1 AA-2 B-2 AA-3 B-3 [B]テーブルに [CODE3](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] [CODEB]のフィールドがあります。 X 1 A-1 AA-2 X 2 A-3 AA-1 Y 1 A-2 AA-3 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 結果が [NO/LINE/CODE/CODEB/NM1/NM2/BIKO] X 1 A-1 AA-2 NAME-B-1 NAME-B-2 BIKO-1 X 2 A-3 AA-1 (null) NAME-B-1 (null) と、なる様にしたいのです。 要するに、のBIKOは、[C2.LINE2]の一番最小の物を取得したいのです。 SELECT C1.NO, C1.LINE, C1.CODE, C1.CODEB, B.NAMEB AS NM1, B_1.NAMEB AS NM2, C2.LINE2, C2.BIKO FROM ((((C1 LEFT JOIN A ON C1.CODE = A.CODE) LEFT JOIN B ON A.CODE2 = B.CODE3) LEFT JOIN A2 ON C1.CODEB = A2.CODEB) LEFT JOIN B B_1 ON A2.CODE2 = B_1.CODE3) LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO) WHERE (((C1.NO)='X')) ORDER BY C1.NO, C1.LINE, C2.LINE2; と、考えたのですが、結果が X 1 A-1 AA-2 NAME-B-1 NAME-B-2 1 BIKO-1 X 1 A-1 AA-2 NAME-B-1 NAME-B-2 2 BIKO-2 X 2 A-3 AA-1 (null) NAME-B-1(null)(null) と、出てしまいます。 どうすれば良いのでしょうか ? 宜しくお願い致します。

  • 《Excelマクロ》請求書のデータを一覧表に抽出したい

    こんにちは。いつも参考にさせてもらってます。 下記のような請求書に入力したデータなんですが、     A      B    …    E    F    G   H 5  顧客codeあ|顧客名あ ・ 11 商品codeA|商品名A   単価A|仕入値A|数量|金額 ・  商品codeB|商品名B   単価B|仕入値B|数量|金額 ・  商品codeC|商品名C   単価C|仕入値C|数量|金額 50 ------------------------------------------------------------ 入力を済ませたら直ちに別のシート(仮に「一覧表」)に下記のように 抽出したいのです。     A      B       C      D      E   …  FV 1               商品codeA|商品codeB|商品codeC … 2                商品名A |商品名B  |商品名C … 3 顧客codeあ|顧客名あ   単価A | 単価B  | 単価C  … 4 顧客codeあ|顧客名あ 仕入値A |仕入値B |仕入値C  … ・ 顧客の数に応じて増減 ※1~2行目の商品code・商品名についてはあらかじめシート内に記載 ※1つの顧客に、単価と仕入値、2行の表記が出てきます ------------------------------------------------------------- 1つの顧客について、請求書に入力を済ませたらボタン操作で 一覧表に抽出し、また新たな顧客を請求書に入力、抽出・・・の繰り返し 作業を行いたいと思っています。 なおかつ、最終的にはどの顧客にもまったく売れていない商品(単価・仕入 共に0)の列を省いて体裁を整えたいと考えています。(横に長すぎるので) 似たようなマクロは見かけるのですが、知識が乏しいので応用がきかず うまく生かすことができません・・・ マクロは自動記録しかやったことがないので、完全に行き詰っています。 皆さんのお知恵を貸してください。よろしくお願いします。

  • insertの高速化?

    夜間処理で テーブルX(明細表)とテーブルY(コード表)を 結合(直積)してテーブルZ(結果表)へ挿入する処理が 現在20分かかるので、高速化したいと思っています。 何か良い知恵を教えてください。 下記の例で、項目CODE_Dは項目CODE_Bの集計先のようなキーで テーブルXの情報に 項目CODE_Dを編集することで 検索性能を向上させる目的があります。 SQLの時間のかかるポイントは  (1)SELECT時に直積を作成する個所  (2)インサート と思っており、そこを速くできれば効果があるのかもしれません。 各テーブルにある項目CODE_Aは2値しかとらないので 項目CODE_Aをキーにしてパーティション化しようかとも考えていますが 効果があるのかどうか悩んでいます。 ■例 [入力] ・テーブルX(明細表) 7万件 項目 CODE_A, CODE_B, CODE_C, DATA_Z ・テーブルY(コード表) 37万件 項目 CODE_A, CODE_B, CODE_D [出力] ・テーブルZ(結果表) 340万件 項目 CODE_A, CODE_B, CODE_C, CODE_D, DATA_Z [SQL文] INSERT INTO Z NOLOGGING SELECT X.CODE_A, X.CODE_B, X.CODE_C, Y.CODE_D, X.DATA_Z FROM Y, X WHERE Y.CODE_A = X.CODE_A AND Y.CODE_B = X.CODE_B [環境等の条件] ・ORACLEのバージョン 9.2.0.1 ・parallel_max_servers 16 ・redoやundo表領域、テーブル表領域は十分にメンテナンスされている ・ディスクは RAID5で、たくさんのメモリを搭載 ・CPU数は4つ

  • 列の一部が追加できないクエリについて

    現在社内の顧客管理をAccessで行おうとして、まずはAccess2003にてスタンドアロンで顧客管理システムを作成し、アップサイジングウィザードを使用してSQL Server Express Editionへテーブル情報をコピーし、テーブルのリンクにて接続する状態まで来たのですが、とあるクエリで新たにレコードを追加する際に一部の列の変更が出来ないと言った現象が発生しています。既に存在している情報については問題なく変更出来ます。テーブル情報をSQL Serverにコピーする以前(mdbの状態)では正常に追加出来ていました。 問題のクエリの構成ですが、 テーブルA、テーブルB、テーブルC、テーブルD共に顧客コード(KOKYAKU_CODE)を主キーにしており、 テーブルAの顧客コード、会社名 テーブルBの○○フラグ、△△フラグ テーブルCの××コード テーブルDの□□コード を表示するようなクエリとなります。 SQLビューでFROM部分を確認すると、 「FROM ((テーブルA INNER JOIN テーブルB ON テーブルA.KOKYAKU_CODE = テーブルB.KOKYAKU_CODE) INNER JOIN テーブルC ON テーブルA.KOKYAKU_CODE = テーブルC.KOKYAKU_CODE) INNER JOIN テーブルD ON テーブルA.KOKYAKU_CODE = テーブルD.KOKYAKU_CODE;」 となっています。 このうち、新規レコード追加時にテーブルB、テーブルC、テーブルDの情報の書き換えが出来ない状態です。 恐らくリレーションの設定がおかしい為にこの様な現象になっているのだとは思うのですが、mdbの状態(アップサイジングウィザード実行前)では問題ない事や、SQL Serverのダイヤグラム等が関係しているのかがよく分からずにいます。 すみませんが助言をお願い致します。

  • SQLの構文の質問です。

    以下のテーブルがあります。 table ID key code cls add_date -- ---- ----- ---- ---------- 1 0001 A01 0 2013/01/01 2 0001 A01 0 2013/01/15 3 0001 B01 0 2013/02/01 4 0002 C01 0 2013/01/20 5 0003 XYZ01 0 2013/01/10 6 0003 XYZ01 0 2013/01/20 : このテーブルからkey、codeが重複したものを除いて、一意となる日付が最新のを 取り出したいのですがSQLをどのようにすればよいか教えてください。 結果: 2 0001 A01 0 2013/01/15 3 0001 B01 0 2013/02/01 4 0002 C01 0 2013/01/20 6 0003 XYZ01 0 2013/01/20 分析関数、相関関数を使うのでしょうか。 使わなくてもできるのでしょうか。 今後の為に、両方を教えてください。