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

Plsql 从两个不同的case语句中获取值,plsql,case,Plsql,Case,我有两张桌子。首先,销售表: Salesid Amount Productid Monthid 20 10 1 201307 15 25 1 201301 40 20 5 201303 注意:超过1000行 第二,我有一个产品表: Productid Desc

我有两张桌子。首先,销售表:

 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
到目前为止还不错。现在我还想有另一列,它给出了两种情况下的值的差异

我可以把这写在案例陈述中,还是有更好的方法

注意:在这里执行自联接对我来说是不可取的,因为它有很多行,因此需要很长时间才能显示


谢谢。

您可以将原始语句生成子查询:

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
)

+1.您可能需要修复语法错误,例如缺少逗号和(我相信)无效的大小写表达式(保留在OP的问题中)。这样可以解决问题,我会尝试一下。还有一个问题:如果我想从查询中得到一个百分比值,我该如何表达查询?假设案例2的值>案例1,那么我的结果应该是((案例1-案例2)/案例2)*100,如果案例1>案例2,那么((案例1-案例2)/案例1)*100。有什么想法吗?