ORACLE SQLビューで縦レコードを横1列に表示する方法

このQ&Aのポイント
  • ORACLEのビューで縦持ちレコードの値を横1列に表示する方法について教えてください。
  • 請求番号と請求月ごとの請求金額を持つ縦持ちのレコードをORACLEのビューで横1列に表示する方法を教えてください。
  • ビューで縦レコードを横1列に変換する方法について教えてください。
回答を見る
  • ベストアンサー

ORACLE SQLビューで縦レコードを横1列に表示する方法

ORACLEのビューで下記の縦持ちレコードの値を横1列に 表示するビューを作成したいのですが、方法がわかりません。 ビューで作成するのは無理でしょうか? ご教授ください。 請求番号 請求月 請求金額  1    4     1000 1    5     1500 2    4     5000 2    5     2500 ↓ 請求番号 4月  5月 1   1000  1500 2   5000  2500

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

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

先日、似たような件に回答しました。 http://oshiete1.goo.ne.jp/qa4355319.html 以下SQLをViewにすればよいかと。 SELECT 請求番号, '2008年' AS 年度, CASE WHEN 請求月 = 200801 THEN NVL(請求金額,0) END 請求金額01月, CASE WHEN 請求月 = 200802 THEN NVL(請求金額,0) END 請求金額02月, CASE WHEN 請求月 = 200803 THEN NVL(請求金額,0) END 請求金額03月, CASE WHEN 請求月 = 200804 THEN NVL(請求金額,0) END 請求金額04月, CASE WHEN 請求月 = 200805 THEN NVL(請求金額,0) END 請求金額05月, CASE WHEN 請求月 = 200806 THEN NVL(請求金額,0) END 請求金額06月, CASE WHEN 請求月 = 200807 THEN NVL(請求金額,0) END 請求金額07月, CASE WHEN 請求月 = 200808 THEN NVL(請求金額,0) END 請求金額08月, CASE WHEN 請求月 = 200809 THEN NVL(請求金額,0) END 請求金額09月, CASE WHEN 請求月 = 200810 THEN NVL(請求金額,0) END 請求金額10月, CASE WHEN 請求月 = 200811 THEN NVL(請求金額,0) END 請求金額11月, CASE WHEN 請求月 = 200812 THEN NVL(請求金額,0) END 請求金額12月 FROM テーブル where 請求月 between 200801 and 200812 GROUP BY 請求番号 ;

参考URL:
http://oshiete1.goo.ne.jp/qa4355319.html

関連するQ&A

  • OracleのViewの作り方

    OracleのViewについてですが。。 ‘あ行’という名前のテーブルと‘か行’という名前のテーブルがあるとします。 ‘あ行’テーブルには‘あ’,‘い’,‘う’という列名があり、 ‘か行’には‘か’,‘き’,‘く’,‘あ’,‘い’という列名があるとします。 以上の2つのテーブルから‘ひらがな’というViewを作りたいとします。 このViewの条件としては‘あ行’から‘あ’,‘い’をselectし、‘か行’からは‘あ行’と‘か行’のそれぞれの‘あ’列の項目が同じであるレコードから‘か’と‘あ’と‘い’をselectしてきます。この時‘あ’という列の項目内容は分かっていて、その項目が記載してあるレコードに‘い’の項目内容をupdateしたいとするとどのようにViewを書けばよいのでしょうか?あくまでもそれぞれのテーブルに直接‘い’項目を書くのではなくてViewにおいてUpdateで書きたいのですが。

  • Oracle SQLで文字列操作

    始めまして。 VB6でプログラミングをしています。DBはOracle8.16です。 Oracleテーブル上で、カテゴリー別に " 文字列 & ナンバリング " の値をもつレコードを、インサートしていく作業をしています。 ナンバリングの部分の現在の最大値に1足したものを、 新規レコードで値を持たせインサートしてます。 tblA Col1           Col2 1            NA-P1-1 1            NA-P1-2 1            NA-P1-3 1            NA-P1-4 3            NA-P3-1 3            NA-P3-2 3            NA-P3-3 1   この場合、 Select max(Col2) from tblA where Col1 = 1 で現在のCol1=1のMax値(Col2)は NA-P1-4 と取り出せるできるんですが、新規に追加するレコードのCol2の値が NA-P1-5だと取得できる方法はあるでしょうか。 Select Max(col2)+1 ~だと、カラム定義がvarchar2なんで、 当然のようにシステムに怒られました(当然ですが。。) お分かりの方、お願い致します。

  • オラクル結合SQL

    こんばんわ。オラクル初心者です。 オラクル9.1で、下記のようにtable1とtable2を結合して、view1(oracleビュー) を作成したいのですが、どのようなSQLがよいでしょうか。 なかなかうまい方法がなくてこまっています。 table1 no 項目 その他 その他1 1   1 1  2 1  3 .....省略 table2 no 項目 種別 結果 1  1  01  3 1  1  02   8 1  1   03  7 1  2  01  9 1  2   02   6 1  2  03  2 1  3  01   1 ...... view1 良い例 no 項目 結果1 結果2 結果3 1   1   3   8   7    ←種別01 02 03を順にいれる 1   2  9   6  2 1  3  1............ select table1.no,table1.項目,・・・ from table1,table2 where table1.no = table2.no and table1.項目 = table2.項目 ↑おおよそこのような感じになるとは思ってます。 何とか頑張ったのですが、下記のようになってしまうことが 多かったです・・・。どこかSQLがわるいようです。 view1 悪い例 no 項目 結果1 結果2 結果3 1  1   3   8  7 1  1   3   8  7 1  1   3   8  7 1   2  9  6  2 1   2  9  6  2 1   2  9  6  2 1   3  1............ もしご存知の方いらっしゃいましたら、助かります。よろしくお願いいたします。

  • オラクルSQL 一致しないもの一覧

    こんばんわ。ORACLEで、 A 平成 番号 種別 ... 21 12 1 ... 21 12 2 ... 22 13 3 ... 21 13 1 ... B 平成 番号 種別 21 12 1 ... 21 12 5 ... 22 13 5 ... というテーブルがあります。 ここから、平成は21(例えば)という条件で、Aにはあって、Bにはない。もしくは、BにはあってAにはないレコードを検索したいです。 結果は、下記となります。 平成 番号 種別 テーブル名 21 12 2 TABLE A 21 13 1 TABLE A 21 13 5 TABLE B 色々考えたのですがよい方法がわかりませんでした。 効率のよいSQLはありますでしょうか? レコードはA,Bそれぞれ数万件です。 よろしくお願いします。

  • オラクルSQLの累計値取得方法について

    教えてください。 3日ほど、悩んでおります。 オラクルのSQLにおいての累計値の取得がどうしてもできません。 会社毎に、毎日の売上累計をSQL一発で取得したいです。 下記例の【★売上累計金額(会社別)】の箇所をレコード毎につみあげて取りたいのですが・・ ただ、対象期間が6ヶ月(約180日)あるので、レスポンスが重要視されています。 なにか、いい方法があれば教えていただきたいです。 例:売上明細テーブル 会社名 売上日  売上金額 ★売上累計金額(会社別) (1)AAA 2005/12/01 1000    1000 (2)AAA 2005/12/02 200   1200 (3)AAA 2005/12/04 300   1500 (4)AAA 2005/12/10 500   2000 (5)AAA 2005/12/03 100   2100 (6)BBB 2005/12/05 300   300 (7)BBB 2005/12/09 200   500 (8)BBB 2005/12/20 100   600 (9)BBB 2005/12/25 1200   1800 (10)CCC 2005/12/05  500    500 (11)CCC 2005/12/08 1000    1500 以上、なんとかご教授お願いいたします!

  • AccessからOracle DB(View)を参照する方法について

    accessでOracleDBに接続し、アプリケーションを作ろうとしております。 OracleDBのViewを参照し、Accsess側で編集をしようとしております。 AccessからOracleのビューを参照できるようにしましたが、そのビューと accessのテーブルから作成されたクエリが新規レコードの作成ができません。(Accessの画面で「→*」のボタンがグレーアウトになっている) どうすれば新規レコードを追加できるようになりますでしょうか? また、できない場合、どのような代替案がありますでしょうか? すみませんがご回答、宜しくお願いします。

  • ファイルメーカー 縦表示を横表示にする方法と印刷ボタンの作成方法

    ファイルメーカーpro6を使用してます。 靴の製品データを作成しています。 画像付きのレコードを一覧表示にすると縦1列表示になってしまいます。 それを横4つずつに表示していきたいのですが何か方法がありますか? また、対象レコードの印刷をボタン一つで行いたのですがどうしてもうまくいきません。 お手数ですが教えてください。

  • オラクルのレコードカウントの制御(改訂版)

    プログラム初心者です。 オラクル(11g)で、10個のPCで10人が、あるテーブルのデータを更新していく、システムを作成(VB2005)しています。 画面は2パターンです。 ・データ一覧表示画面 ・上記からデータを選択し、編集する用の画面 例として下記のようなデータがあります。 テーブルC 日付順 番号はユニーク 日付_番号_ステータス__レコードカウント(Rc) 1/3____1_____Q________0 1/5____2_____R________1 1/6____5_____G________2 (Rc=2) 1/7____7_____P________3 (Rc=3) 1/20__ 9_____R________4 2/1___10_____U________5 動作の流れ 1.まず、この全データをSQLで読込みます。 SELECT * FROM テーブルC ORDER BY 日付 ASC これが一覧表示画面(VB2005のグリッドビュー等)に表示されます。 2.A氏が例えば1/6のレコードを編集したいとします。 そこで、1/6(日付)の列をマウスで選択。このとき列番号(レコードカウント)は2になります。 編集画面フォームに、同じSQL(SELECT * FROM テーブルC ORDER BY 日付 ASC) と、列番号(レコードカウント)2を、引渡しします。 3.編集画面で、引き渡されたSQLを実行し、そのデータを全てDatatblに格納します。 そのデータの3つめ(レコードカウント2)を参照します。 datatabl.Rows(2).Item("ステータス") データは参照後、ある条件によりステータスが変わります。 ステータスが、"Z"になった場合、そのレコードは、テーブルAに移動されます。 4.編集後は、他のテーブルに移動する場合でも、テーブルCがそのまま更新される場合でも、 自動的に次の列のレコードに移行し編集を行う。 今回は例として、1/6のレコードのステータスが"Z"になって A氏は次に1/7(Rc3)のデータを編集作業に入ります。 5. 4.を実行するため、また同じSQLを実行。 SQL実行後、レコードカウントを次に移行すればいいのですが(Rc=2に1を加え、Rc=3とする)、 Rc=3を見ても、1/20のデータが抽出されて しまいます。 (1/6のレコードが移動してなくなってしまった場合) また、他の例として、上記と同様に、A氏が1/6のデータを編集中に、他の人が1/3,1/5のデータを編集移動 してしまった場合、レコードカウントがぐちゃぐちゃになってしまいます。 こうした多くの人がデータを編集、更新・移動する場合のテーブルを、日付順に作業させていく場合は、どのような制御 (またはオラクルの機能)をすれば、可能なのかご指導頂ければ助かります。

  • 【SQL】取得項目を1レコードに並べるには?

    こんにちは 【テーブル概要】 テーブルA(会員番号テーブル) ・会員番号(PK) テーブルB(買い物情報テーブル) ・会員番号(PK) ・買い物月(PK) ・商品番号(PK) ・請求金額 【したいこと】 上記のようなテーブルがあった場合に、以下のような出力を行いたいと思っています。 会員番号,商品番号,買い物月(7月)の請求金額,買い物月(8月)の請求金額,買い物月(9月)の請求金額 --------,--------,-----------------------,-----------------------,----------------------- 会員1  ,商品1  ,          500,            ,          100 会員1  ,商品2  ,            ,          300,          100 会員2  ,商品1  ,          1500,          100,          100 会員3  ,商品3  ,            ,            ,          100 会員3  ,商品4  ,            ,          200,            【試したこと】 一度、テーブルBを買い物月単位に割ってみました。 テーブルB_買い物月(7月) ・会員番号(PK) ・商品番号(PK) ・請求金額 テーブルB_買い物月(8月) ・会員番号(PK) ・商品番号(PK) ・請求金額 テーブルB_買い物月(9月) ・会員番号(PK) ・商品番号(PK) ・請求金額 それからINNER JOINで繋いでいけば、できるかと思ったのですが 実際の買い物月は結構過去まであり(2003年くらい)、ありえない程深いネストになってしまいます。。 どなたかお知恵をお貸し願います。

  • ビュー(view)のSQL

    SQL初心者で困っております。 どのようなSQLを作成すれば良いか ご助言頂ける方がいらっしゃいましたら よろしくお願いいたします。 テーブルにイメージは以下通りです。 項目1,日付,月,項目2,項目3 1234 ,6/2 ,6 ,A ,1 1234 ,6/4 ,6 ,A ,2 1234 ,6/5 ,6 ,A ,3 1234 ,6/6 ,6 ,B ,1 1234 ,6/6 ,6 ,B ,2 1234 ,6/6 ,6 ,B ,3 1234 ,7/2 ,7 ,A ,1 1234 ,7/4 ,7 ,A ,2 主キーは、項目1,日付です。 ビューで項目1,月をグループ化して、 項目2の昇順のトップ その中で項目3の昇順のトップ のレコードを抽出したいと思います。 結果が以下のようなイメージです。 1234,6,A,1 1234,7,A,1