• ベストアンサー

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

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についても理解できました。