Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
Mysql 一个“选择”查询生成12个结果集_Mysql_Sql_Database_Select - Fatal编程技术网

Mysql 一个“选择”查询生成12个结果集

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

我有一个名为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(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