2014-08-30 57 views
-1

我正在使用ajax调用远程运行mySQL查询并将数据作为数组返回的移动应用程序。我想使用SQLite 3和iPad在本地运行查询。以下是mySQL查询。我遇到麻烦查询SQLite中`使用SUM和GROUP BY将mySQL查询转换为SQLite

工作

这是我的工作MySQL查询

SELECT 
expense_date.expenseDate, 
expenses.cost, 
SUM(expenses.cost) as total, 
expenses.name, 
category.category 
FROM expenses 
INNER JOIN category ON expenses.catID = category.catID 
INNER JOIN expense_date ON expenses.dateID = expense_date.dateID 
WHERE expense_date.expenseDate BETWEEN '#from#' AND '#tu#' 
    AND expenses.catID != '1F27C7A1-3E16-5087-A313-A47D286A77A5' 
    AND expenses.catID != 'DF64C183-5056-A816-1ACA94F902242B61' 
    AND expenses.userID = '#userID#' 
    AND expenses.accountID = '#accountID#' 
Group By expense_date.expenseDate 

修订版的MySQL声明。此语句工作在MySQL,但不是在SQLite的3

SELECT 
    expense_date.expenseDate, 
    SUM(expenses.cost) as total 
    FROM expenses 
    INNER JOIN expense_date ON expenses.dateID = expense_date.dateID 
    WHERE expense_date.expenseDate 
     BETWEEN '2014-08-01' AND '2014-08-31' 
     AND expenses.catID != '1F27C7A1-3E16-5087-A313-A47D286A77A5' 
     AND expenses.catID != 'DF64C183-5056-A816-1ACA94F902242B61' 
     AND expenses.userID = 'C4C73329-5056-A816-1AB4B9FAE08FDB77' 
     AND expenses.accountID = '46298719-C78A-4CCE-8ADD-A3FD948DF93E' 
     Group By expense_date.expenseDate 

这是查询的结果。 2014-08-21有两个值:2000.00和372.00,但它们被叠加在一起并作为2014-08-21的单个值返回。

2014-08-01 32.00 
2014-08-16 15.00 
2014-08-19 513.55 
2014-08-21 2372.00 
2014-08-22 525.00 
2014-08-25 34.55 
2014-08-27 52.78 
2014-08-31 30.00 

我需要将MySQL查询代码转换为SQLite。我做了一个谷歌搜索,发现了一些关于使用CASE的信息,但我不知道如何构造sql语句。您的帮助表示赞赏

+0

对不起,但'它不工作'也不适用于我们。请提供明确的错误消息或明确的结果说明。 – 2014-08-30 14:24:09

+0

此查询没有意义开始。对于同一个费用日期中具有多行的组,应该输出哪个'cost' /'name' /'category'值? – 2014-08-30 14:36:32

+0

#php,#CL mySQL查询适用于我的数据,但是我已经拿出了我真的不需要检索的代码。我发布了新的mySQL。 – west1024 2014-08-30 21:09:32

回答

0

这是解决我的问题的SQLite sql语句。

SELECT expense_date.expenseDate, 
SUM(expenses.cost) AS total 
FROM expenses INNER JOIN expense_date ON expenses.dateID = expense_date.dateID 
WHERE expense_date.expenseDate BETWEEN '"+from+"' AND '"+tu+"' 
AND expenses.catID <> '1F27C7A1-3E16-5087-A313-A47D286A77A5' 
AND expenses.catID <> 'DF64C183-5056-A816-1ACA94F902242B61' Group By expense_date.expenseDate 

感谢大家的帮助。

0

您的SQL查询实际上在MySQL中没有意义,因为几个选定的值是不确定的。你可以尝试这样的事情:

SELECT ed.expenseDate, SUM(e.cost) as total, 
     group_concat(e.name) as names, 
     group_concat(c.category) as categories 
FROM expenses e INNER JOIN 
    category c 
    ON e.catID = e.catID INNER JOIN 
    expense_date ed 
    ON e.dateID = ed.dateID 
WHERE ed.expenseDate BETWEEN '#from#' AND '#tu#' AND 
     e.catID <> '1F27C7A1-3E16-5087-A313-A47D286A77A5' AND 
     e.catID <> 'DF64C183-5056-A816-1ACA94F902242B61' AND 
     e.userID = '#userID#' AND 
     e.accountID = '#accountID#' 
Group By ed.expenseDate; 
+0

#GordonLinoff谢谢你的回复。我删除了一些不必要的代码,但是你的代码并没有给出日期的正确总数。有些日期的成本超过成本,其他日期则没有。上面的代码为每个日期创建一个总计。不知道你的代码是如何创建总数的。 – west1024 2014-08-30 21:18:06

+0

#gordonlinoff我添加的代码更新在MySQL中有效,但在SQLite中不起作用 – west1024 2014-08-31 01:40:29

+0

我试图通过添加从MySQL SQL语句的工作版本中获得的结果来澄清我的问题。 – west1024 2014-08-31 04:06:37