Android SQLite - 如何将数据库表达式与union或join语句

时间:2016-12-10 19:57:57

标签: android sqlite join union

按日期我有一个存有金钱项目的表格。 有些货币项目是贷款,其他货币则是借入。

根据我的要求,我想首先获得所有贷款,按月(使用strftime函数),并按月将所有借入资金联合起来(或加入不知道)。

因此,如果我有一个专门的月份,只有一个贷款项目或只有一个借项,我仍然想抓住它。

然后我将使用结果显示两个条形图图形。

这是我的sql语句:

Cursor cursor = mDb.rawQuery("SELECT date_o, loan, borrow FROM " +
                        "(SELECT strftime('%m', date) AS date_o, SUM(amount) AS loan, '0' AS borrow FROM " +
                        "(SELECT date, amount FROM " + DATABASE_TABLE + " WHERE date > date('now', '-6 months') AND TYPE = " + ActivityClass.DATABASE_LOAN_TYPE + " ORDER BY date DESC) " +
                        "GROUP BY strftime('%m', date) " +
                        "UNION ALL " +
                        "SELECT strftime('%m', date) AS date_o, '0' AS loan, SUM(amount) AS borrow FROM " +
                        "(SELECT date, amount FROM " + DATABASE_TABLE + " WHERE date > date('now', '-6 months') AND TYPE = " + ActivityClass.DATABASE_BORROW_TYPE + " ORDER BY date DESC) " +
                        "GROUP BY strftime('%m', date)) GROUP BY date_o", null);

UNION之后的声明似乎用0清除所有贷款项目。 我在网上检查了LEFT OUTER JOIN,但仍然试图了解这如何能够满足我的需求。

最后,我想要的是这样的事情:

这是我的表:

Date          Amnt  Type
01/12/2016    15    Borrow
05/12/2016    10    Loan
01/11/2016    20    Loan
19/11/2016    10    Loan
01/10/2016    15    Borrow

这就是我想要的(在重新组合strftime之后按月计算:

Month         SUM(loan)   SUM(borrow)
10            0           15
11            30          0
12            10          15

感谢。

0 个答案:

没有答案