2014-09-22 50 views
1

我有一張名爲增值稅的表,我需要生成每月增值稅報告。所以下面是我做的......一個「選擇」查詢生成12個結果集

SELECT SUM(Amount) AS "January" 
    WHERE current_time_stamp BETWEEN '2014-01-01' AND '2014-01-310' 
    FROM VAT 

就像上面的查詢,我有一月,二月,三月等12個查詢因此,而不是寫12,是有辦法,我可以得到所有這些在1查詢?

回答

1

可以使用條件和使用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 
+1

太棒了。謝謝!! – 2014-09-22 07:20:40

0

使用GROUP BY,像這樣:

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) 

但是,它可能是緩慢的情況下,你有很多的記錄。

0

喜歡的東西,擴大到十二個月

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 
0
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 
相關問題