Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用不同参数的相同查询_Sql_Oracle_Sum - Fatal编程技术网

Sql 使用不同参数的相同查询

Sql 使用不同参数的相同查询,sql,oracle,sum,Sql,Oracle,Sum,我有一个查询,用于计算过去12个月的金额,如: select part_no, count(part_no) r12 from t1 where (t1.created<=sysdate and t1.created>=add_months(sysdate,-12) 您可能可以尝试以下方式: SELECT part_no, SUM( IF(t1.created>=add_months(sysdate,-12), 1, 0) ) r12

我有一个查询,用于计算过去12个月的金额,如:

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

您可能可以尝试以下方式:

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

您可以在子查询和分组中计算以月为单位的日期差。但不要忘记查询性能。

如果您只想知道最近12、6和3的所有项的计数,您可以按如下方式更改查询

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

对不起,我的英语不好,但我试着解释一下:当一行变成三列时是有可能的。谢谢,这似乎是最可行的方法。
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