アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLについて質問させてください。

年 月 売上
------------
2003 4 100
2003 5 200
2002 4 300

上記のようなテーブルがあるばあい

年 月 売上 前年
-----------------
2003 4 100 300
2003 5 200 0
2002 4 300 0

このような結果(前年、同月の売上の数値を
前年列に表示)を得るための View を
作成したいのですが、どうしたら
よいでしょうか。
データベースは Sybase です。
よろしくお願いいたします。

A 回答 (3件)

ANo.2の補足です。

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

このような単純なテーブルを想定していますが


------------------
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;
-------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/09 23:39

 


自己結合を使えばできるでしょう。

SELECT ・・・・ FROM A表 Left Join A表 As 前年
ON A表.年月 = 1年加算(前年.年月)

ポイント(注意点)は

(1) Inner Join ではなく、Left Joinを使用する。(前年のレコードがない場合でもレコードを抽出するため)
(2) 同一の表を別の表として扱うため、エイリアスする。

(3) 結合条件は、単純に A表.年月 = 前年.年月 ではなく、1年加算(または減算)した値で結合する。

日付を加算する関数は、DBMSに依存すると思いますので、ご使用のDBMS(Sybase)でご確認ください。
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/09 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!