Reputation: 421
Table: Accounting
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
How do I Generate a Table Like:
date_paid IncomeAmountPaid ExpenseAmountPaid
2012-08 TOTAL INCOME IN AUGUST TOTAL EXPENSE IN AUGUST
2012-09 TOTAL INCOME IN SEPT. TOTAL EXPENSE IN SEPTEMBER
Upvotes: 2
Views: 1676
Reputation: 843
u can try this,
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)
Upvotes: 0
Reputation: 247730
You can use the following, which implements a CASE
statement and 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')
Upvotes: 5
Reputation: 4763
How to GROUP
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
How to SUM
SELECT SUM(column_name) FROM table_name
How to SPLIT
create a split function
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, '');
then use the function
SELECT SPLIT_STR(string, delimiter, position)
Upvotes: 0