我有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个案例中值的差异。
我可以在案例陈述中写这个,或者有更好的方法吗?
注意:我不希望在这里执行自联接,因为它有很多行,因此显示时间太长。
感谢。
答案 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
)