Sql 使用不同参数的相同查询
我有一个查询,用于计算过去12个月的金额,如: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
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