Mysql 一个“选择”查询生成12个结果集
我有一个名为VAT的表,我需要生成月度VAT报告。下面是我所做的Mysql 一个“选择”查询生成12个结果集,mysql,sql,database,select,Mysql,Sql,Database,Select,我有一个名为VAT的表,我需要生成月度VAT报告。下面是我所做的 SELECT SUM(Amount) AS "January" WHERE current_time_stamp BETWEEN '2014-01-01' AND '2014-01-310' FROM VAT 就像上面的查询一样,我有12个关于1月、2月、3月等的查询。因此,我不写12个,有没有办法在一个查询中获得所有这些信息?使用分组方式,如下所示: SELECT SUM(Amount), MONTH
SELECT SUM(Amount) AS "January"
WHERE current_time_stamp BETWEEN '2014-01-01' AND '2014-01-310'
FROM VAT
就像上面的查询一样,我有12个关于1月、2月、3月等的查询。因此,我不写12个,有没有办法在一个查询中获得所有这些信息?使用
分组方式,如下所示:
SELECT SUM(Amount), MONTH(current_time_stamp) AS `Month`
FROM VAT
WHERE current_time_stamp BETWEEN '2014-01-01' AND '2014-12-31'
GROUP BY MONTH(current_time_stamp)
但是,如果你有很多记录,它可能会很慢。类似的情况会扩展到12个月
SELECT MAX(X.January) AS January, MAX(X.February) AS February FROM
(
SELECT SUM(Amount) AS January, 0 AS February
WHERE current_time_stamp BETWEEN '2014-01-01' AND '2014-01-31'
FROM VAT
UNION
SELECT 0 AS January, SUM(Amount) AS February
WHERE current_time_stamp BETWEEN '2014-02-01' AND '2014-02-29'
FROM VAT
) X
或者你也可以这样做:
SELECT 'January' AS Month, SUM(Amount) AS Amount
WHERE current_time_stamp BETWEEN '2014-01-01' AND '2014-01-31'
FROM VAT
UNION
SELECT 'February' AS Month, SUM(Amount) AS Amount
WHERE current_time_stamp BETWEEN '2014-02-01' AND '2014-02-29'
FROM VAT
您可以在case语句中使用条件求和,下面的查询将为您提供一行12列的每月求和
SELECT
SUM(case when current_time_stamp BETWEEN '2014-01-01' AND '2014-01-31' then Amount else 0 end) AS `January` ,
SUM(case when current_time_stamp BETWEEN '2014-02-01' AND '2014-02-29' then Amount else 0 end) AS `Febuary` ,
.
.
.
SUM(case when current_time_stamp BETWEEN '2014-12-01' AND '2014-12-31' then Amount else 0 end) AS `December`
FROM VAT
select t.mnth_amt,t.mnth
from (
select sum(amount) as mnth_amt,MONTH(current_time_stamp ) as mnth from vat where current_time_stamp BETWEEN '2014-01-01' AND
'2014-12-31' GROUP BY MONTH(current_time_stamp)
) t order by mnth