1

表:会计

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
4

3 回答 3

5

您可以使用以下内容,它实现了一个CASE语句和一个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

于 2012-09-26T15:52:28.993 回答
0

如何分组

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

如何求和

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)
于 2012-09-26T15:46:30.613 回答
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)
于 2012-09-26T15:59:13.887 回答