0

私は2つのテーブルを持っています。まず、販売テーブル:

 Salesid      Amount     Productid      Monthid
   20           10         1             201307
   15           25         1             201301
   40           20         5             201303

注: 1000 行以上。

次に、製品テーブルがあります。

 Productid     Description       Product_elemid

    1            AAA                  24
    2            BBB                  57           
    5            CCC                  23
    1            AAA_ACE              25

注:約 100 行。

ここで、これら 2 つのテーブルのデータを表示したいと思います。これは私が現在持っているものです:

Select p.description 

       case ( when s.monthid between 201301 and 201307 then sum(s.amount) else 0 end) 
       case ( when s.monthid between 201303 and 201305 then sum(s.amount) else 0 end) 
from sales s, product p
where s.productid = p.productid 
and p.productid in ('1, '2', '5')
group by p.description

3列のテーブルを取得します:

p.description         case 1 values             case 2 values

ここまでは順調ですね。ここで、2 つのケースの値の差を示す別の列も必要です。

これをケースステートメントに書いてもいいですか、それとももっと良い方法はありますか?

注 : ここで自己結合を実行することは、行数が多く、表示に時間がかかりすぎるため、望ましくありません。

ありがとう。

4

1 に答える 1

1

元のステートメントをサブクエリにすることができます。

Select description, case_1, case_2, case_1 - case_2
from
 (Select p.description as description

   case ( when s.monthid between 201301 and 201307 then sum(s.amount) else 0 end) as case_1
   case ( when s.monthid between 201303 and 201305 then sum(s.amount) else 0 end) as case_2
 from sales s, product p
 where s.productid = p.productid 
 and p.productid in ('1, '2', '5')
 group by p.description
)
于 2013-08-12T18:24:26.810 に答える