• ベストアンサー

同一テーブルの別レコードの内容表示

SQLについて質問させてください。 年 月 売上 ------------ 2003 4 100 2003 5 200 2002 4 300 上記のようなテーブルがあるばあい 年 月 売上 前年 ----------------- 2003 4 100 300 2003 5 200 0 2002 4 300 0 このような結果(前年、同月の売上の数値を 前年列に表示)を得るための View を 作成したいのですが、どうしたら よいでしょうか。 データベースは Sybase です。 よろしくお願いいたします。

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

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

  自己結合を使えばできるでしょう。 SELECT ・・・・ FROM A表 Left Join A表 As 前年 ON A表.年月 = 1年加算(前年.年月) ポイント(注意点)は (1) Inner Join ではなく、Left Joinを使用する。(前年のレコードがない場合でもレコードを抽出するため) (2) 同一の表を別の表として扱うため、エイリアスする。 (3) 結合条件は、単純に A表.年月 = 前年.年月 ではなく、1年加算(または減算)した値で結合する。 日付を加算する関数は、DBMSに依存すると思いますので、ご使用のDBMS(Sybase)でご確認ください。  

ukeguchi
質問者

お礼

ありがとうございます。 今、Sybaseの環境がないので Oracleで試してみましたが大丈夫そうです。 ありがとうございました。

その他の回答 (2)

  • wnm
  • ベストアンサー率48% (23/47)
回答No.3

ANo.2の補足です。ANo.1の説明の様にLeft Joinを使用したほうが良いと考えます。(解説の中にある、前年の情報が無い場合の処理のためです)

  • wnm
  • ベストアンサー率48% (23/47)
回答No.2

このような単純なテーブルを想定していますが ------------------ Table : SALES year num month num uriage num ------------------- 同じテーブルを別名で参照して、連結すれば希望の表示が得られませんか? 下のselect文では Fromの中で"L"として定義しています。 ------------------------------- SELECT sales.year, sales.month, sales.uriage,l.uriage FROM sales, sales l where sales.year=l.year+1 and sales.month=l.month; -------------------------------

ukeguchi
質問者

お礼

ありがとうございます。 具体的にSQLで示してもらったので わかりやすかったです。 補足のLeft Joinについても理解できました。

関連するQ&A

  • SQL文で同DB内、テーブルから別テーブルにコピー

    同じデータベース内にA、Bという、ほとんど同じテーブルがあります。 異なるのは、2つの列に限り名前は同じですが、型が異なります。 その場合、その2列以外のデータはそのままコピーし、その2列には「1」という数値を設定したいです。 SQL serverでしたら、どのようなクエリになりますでしょうか? よろしくお願いします。

  • Access2000VBAにてDAOでカレントにあるテーブルの内容をSQLで抽出して別のテーブルを作成する方法

    こんにちは Access2000VBA初心者です。 現在開いているデーターベースで、フォーム上から抽出条件を入力してそれをSQLに渡し、定義させているテーブルから抽出して新しいテーブルを作成する記述がわかりません。 DAOでできそうなのですが、VBA教本を読んでいるとDebug.printで抽出結果を表示して終わっているのでそれ以上のことが書いてありません。 やりたいことは、SQLでテーブルから必要な条件をセットしてそれをrecordsetにいれるのだと思いますが、 そのrecordsetをなんとか新しいテーブルに作成して入れることはできないのでしょうか。 AccessVBAに明るい方よろしくお願いいたします。

  • MySQLで別テーブルを参照し、レコードを消したい

    お世話になります。MySQL4のデータベース上に2つのテーブルがあるのですが、 片方のテーブル(a)にあるフィールド(b_id)の値を参照し、もう片方のテーブル(b)のレコードを消していきたいのです。 具体的には以下のようなテーブル(a)とテーブル(b)があります。 TBL: a =========================== id    b_id    category =========================== 0     1       3 --------------------------- 1     2       1 --------------------------- 2     3       2 --------------------------- 3     4       2 --------------------------- TBL: b =========================== id    name    price =========================== 0    goodsA   1,000 --------------------------- 1    goodsB   500 --------------------------- 2    goodsC   250 --------------------------- 3    goodsD   2,500 --------------------------- 4    goodsE    1,800 --------------------------- やりたいことは、テーブル(a)の「category」フィールドが「2」以外であれば、 そのレコードの「b_id」にある数値を「id」にもつ、テーブル(b)のレコードを消していきたいのです。 上記の例だと、テーブル(a)のid「0」と「1」がcategoryに「2」以外を持っています。 この2つのレコードのb_idは「1」と「2」ですので、テーブル(b)のid「1」と「2」を消したいと思っています。 SQLについて知識がなく、困っています。どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。

  • テーブルのレコード削除ができません

    SQLserver2000を触る事になり思った通りにならず困っております。 テーブルに主キーを設定せずデータ型を「int」でフィールドに重複する数値を入れてしまいました。 後から重複入力のミスに気づき重複したレコードを 「テーブルを開く」-「全行を返す」から1レコードを 削除しようとしたのですが、 「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます。」と表示され削除できません。 このテーブルは、多くのビューで使用してすでに動いている再作成することは難しいです。 このレコードを削除する良い方法はあるのでしょうか。 ご存知の先生方ご指導よろしくお願いいたします。

  • マクロを使用すると表示できなくなるのです

    さきほども別の質問をさせていただきました。 もう一つお願いいたします。 表形式で、c列に前年売上500,231,655 d列に当年売上485,652,311という数値がずらっとならんでおり、E列に前年比という項目があります。前年比は前年売上/当年売上でだすことはできます。これを小数点以下第二位までの%表示させています。この前年と当年売上の数値を百万単位や円単位、千円単位で表示させるマクロを作りました。そうすると、この前年比の項目の%表示したものが、1や0という数値に変わります。セルにはきちんと前年売上/当年売上の数式が入っているのですが%表示されなくなります。これをマクロを使ってもきちんと%表示させることってできるんでしょうか? 明日の会議で必要になる資料なもので、どなたか教えてください。よろしくお願いいたします。

  • レコードを上から順に読み込みたい

    SQLを初めたばかりです。ACCESS2010を使っています。 テーブルを上から順番に読み込んで、とあるフィールドの数値に 1を足してから該当レコードを更新する単純なことがしたいのですが 上手く行きません。 現在は次のようになっています。 rs.Open "uriage", cn, , adLockOptimistic Do Until rs.EOF sql = "" sql = "UPDATE uriage SET 売上額 = 売上額 + 1" cn.Execute sql rs.MoveNext Loop これを実行すると、売上額フィールドに入っている数値に レコードの件数分の数値が足された結果となります。 例えばレコード件数が10で、売上額が1なら11、となります。 多分初歩的な事が理解できていないのだと思いますが 何故なのかがわかりません。

  • VISIO2000でDBのテーブル作成するSQLは生成できませんか?

    VISIO2000を使用していて、データベースモデル図を新規作成したのですが、 書いた図に対応するDDL(SQL)を生成することはできないのでしょうか? ビューの場合はSQLは生成されるようなのですが、自分で作成したエンティティ を実現するテーブルが生成されません。

  • SQLServer2005上の別DBからテーブルを読みたい

    SQLServer2005で2つの異なるデータベース(ADB、BDB)が存在します。 ADBでBDBにあるテーブルを取得して検索をかけたいのですが、どのようにすれば実現できるのでしょうか。 BDBのVIEWを作成するイメージなんですが、リンクテーブルを設定するとかが必要になるのですか。 もしそうだとしたら、どうリンクテーブルを設定するのか教えてください。

  • 複数のテーブルをつなげる

    (SQLデータベース)同じフィールド構成になっているテーブルを複数つなげて、あたかも一つのテーブルのようにすることは可能ですか?  SQLでビューみたいなのを作ったり、直接Reportingソフト上の関数(VB)で作ったりしたいです。    目的は、CrystalReport(Reportingソフト)で、リンク関係のない3つのテーブルをリストし、検索できるようにする、です。  質問が分かり難いかもしれませんが、もしお分かりになる方があれば教えてください!

  • データベースのテーブル一覧を表示する方法

    Oracleデータベースの作成したテーブル一覧を表示させるSQL文を教えてください。