包括结果但排除SQL查询中的数据

时间:2018-06-09 19:40:25

标签: sql oracle

我有一张桌子(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)

我如何做到这一点?

1 个答案:

答案 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,因此上面的代码段仅汇总了去年的值。