2012-09-26 27 views
1

表在MYSQL數據庫組和拆分數據:會計如何總結,根據日期

date_due  date_paid   amount_due  amount_paid category_type 
2012-08-12  2012-08-12  500   450   Income 
2012-08-13  2012-08-17  200   300   Expense 
2012-09-15  2012-09-13  300   300   Income 
2012-09-17  2012-09-16  100   100   Income 

如何生成表所示:

date_paid  IncomeAmountPaid    ExpenseAmountPaid 
2012-08   TOTAL INCOME IN AUGUST   TOTAL EXPENSE IN AUGUST 
2012-09   TOTAL INCOME IN SEPT.   TOTAL EXPENSE IN SEPTEMBER 
+0

將能夠幫助你更多,如果你說你想要什麼總結,組和分裂 –

回答

5

您可以使用以下,它實現了一個CASE聲明, a GROUP BY

select date_format(date_paid, '%Y-%m') date_paid, 
    sum(case when category_type = 'Income' then amount_paid end) IncomePaid, 
    sum(case when category_type = 'Expense' then amount_paid end) ExpensePaid 
from accounting 
group by date_format(date_paid, '%Y-%m') 

SQL Fiddle with Demo

+0

它的作品!非常感謝! – ThisBoyPerforms

0

如何GROUP

SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator value 
GROUP BY column_name 

如何SUM

SELECT SUM(column_name) FROM table_name 

如何分割

創建拆分功能

CREATE FUNCTION SPLIT_STR(
    x VARCHAR(255), 
    delim VARCHAR(12), 
    pos INT 
) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), 
     LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), 
     delim, ''); 

然後使用功能

SELECT SPLIT_STR(string, delimiter, position) 
0

ü可以試試這個,

select Year(date_paid), Month(date_paid), 
    sum(case when category_type = 'Income' then amount_paid end) IncomeAmountPaid, 
    sum(case when category_type = 'Expense' then amount_paid end) ExpenseAmountPaid 
group by Year(date_paid), Month(date_paid)