我有一张桌子(Oracle):
customer_quote
------
int id
int part_key (fk)
int condition_code (fk)
number unit_price
int qty_quoted
date entry_date
使用查询选择过去一年的数据:
SELECT cq.part_key
, cq.condition_code
, COUNT(*) AS cq_count
, SUM(cq.unit_price * cq.qty_quoted) AS cq_total
, SUM(cq.qty_quoted) cq_qty
FROM customer_quote cq
WHERE cq.entry_date > TO_DATE('09-Jun-2017', 'dd-mm-yyyy')
GROUP BY cq.part_key
, cq.condition_code
但我需要将数据包含在过去两年中具有活动的部分,但是超过1年的数据不应计入总数。因此,去年没有数据的部分应显示在结果中,但总数为0, 0, 0
,如下所示:
44814 45 25 20114.1 81
41404 45 4 10237 50
31823 45 4 1050.5 17
25380 49 0 (null) (null)
58791 46 0 (null) (null)
13012 45 0 (null) (null)
我如何做到这一点?
答案 0 :(得分:1)
您可以在case
:
sum
SUM(CASE WHEN cq.entry_date > add_months(sysdate, -12)
THEN cq.unit_price * cq.qty_quoted END) AS cq_total
如果没有when
子句匹配且没有else
,则case
会返回null
。并且sum
会忽略null
,因此上面的代码段仅汇总了去年的值。