具有不同参数的相同查询

时间:2014-02-10 13:24:01

标签: sql oracle sum

我有一个查询来计算过去12个月的总和,如:

select part_no, 
       count(part_no) r12 
  from t1 
 where (t1.created<=sysdate and t1.created>=add_months(sysdate,-12)

是否可以创建一个同时在同一查询中显示滚动6和滚动3的查询,如:

part_no r12 r6 r3
-----------------
100     8   2  1
200     12  1  0
300     10  4  4

3 个答案:

答案 0 :(得分:0)

你可能会尝试这样的事情:

SELECT part_no, 
       SUM( IF(t1.created>=add_months(sysdate,-12), 1, 0) ) r12,
       SUM( IF(t1.created>=add_months(sysdate,-6), 1, 0) ) r6,
       SUM( IF(t1.created>=add_months(sysdate,-3), 1, 0) ) r3
FROM t1 
WHERE t1.created<=sysdate
GROUP BY part_no

答案 1 :(得分:0)

您可以通过它计算子查询和组中的日期差异(以月为单位)。但不要忘记查询性能。

答案 2 :(得分:0)

如果您只想知道过去12,6和3中所有项目的COUNT,您可以按如下方式更改查询。

SELECT part_no
       ,COUNT(CASE WHEN t1.created <= sysdate
                        AND t1.created >= add_months(sysdate, -12) THEN 1
                   ELSE NULL
              END) r12
       ,COUNT(CASE WHEN t1.created <= sysdate
                        AND t1.created >= add_months(sysdate, -6) THEN 1
                   ELSE NULL
              END) r6
       ,COUNT(CASE WHEN t1.created <= sysdate
                        AND t1.created >= add_months(sysdate, -3) THEN 1
                   ELSE NULL
              END) r3
    FROM t1
    GROUP BY part_no