从2个不同的case语句中获取值

时间:2013-08-12 18:11:15

标签: plsql case

我有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行。

现在,我想显示这两个表中的一些数据。这就是我目前所拥有的:

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个案例中值的差异。

我可以在案例陈述中写这个,或者有更好的方法吗?

注意:我不希望在这里执行自联接,因为它有很多行,因此显示时间太长。

感谢。

1 个答案:

答案 0 :(得分: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
)