2015-04-20 2 views
1

Я хочу поднять консолидированный отчет, используя предложение group by в столбце «helper.TX_NAME» в следующем запросе курсора.Как использовать предложение group by в запросе курсора?

String[] columns = {VivzHelper.UID, helper.TX_NAME, helper.TX_PARTICULARS, helper.TX_AMOUNT, helper.TX_DATE}; 

Cursor c = db.query(VivzHelper.TX_TABLE, 
    columns, 
    helper.TX_ID + "='" + name + "' AND " + helper.TX_DATE + " BETWEEN '" + datefrom.from_date + "' AND '" + dateto.to_date + " ' ", 
    null, 
    null, 
    null, 
    null, 
    null); 
+0

«Консолидированный» довольно расплывчатый. Покажите некоторые примеры данных и желаемый результат. –

+0

Теперь мы покинем диапазон дат. Теперь, для сегодняшней даты у меня есть 4 строки. на 3 предмета - молоко - 20 долларов, чай - 4 доллара, медицина - 12 долларов, а снова молоко - 3 доллара. Я могу показать 4 строки отдельно в виде списка. Но на самом деле я хочу группировать элемент мудрый и показывать в 3 строках в виде списка. Результат после группировки должен понравиться: Молоко - $ 23 ($ 20 + $ 3), чай - $ 4, медицина - $ 12. Примечание Pl: Это для простого адаптера для просмотра списка. – user3144078

ответ

1

Чтобы получить выходные строки для каждой комбинации даты и названия, группы этих колонок:

SELECT Date, 
     Name, 
     SUM(Amount) AS Amount 
FROM TxTable 
GROUP BY Date, 
     Name 

В Java, просто поместите соответствующие части в соответствующие параметры:

String[] columns = { 
    helper.TX_NAME, 
    "SUM("+helper.TX_AMOUNT+") AS "+helper.TX_AMOUNT, 
    helper.TX_DATE 
}; 
db.query(VivzHelper.TX_TABLE, 
     columns, 
     helper.TX_ID + "= ? AND " + helper.TX_DATE + " BETWEEN ? AND ?", 
     new String[] { name, datefrom.from_date, dateto.to_date }, 
     helper.TX_NAME + ", " + helper.TX_DATE, 
     null, null); 
+0

Я получаю ошибку при + "," + в запросе о том, что 'Operator' + 'не может быть применен к' java.lang.String ' – user3144078

+0

К сожалению, это была опечатка. –

+0

Как его исправить? – user3144078

0

Вы можете попробовать это:

Cursor c1 = database.rawQuery("SELECT * FROM " + VivzHelper.TX_TABLE+ " where '"+ helper.TX_ID + "'='" + name + "' AND " + helper.TX_DATE + " BETWEEN '" + datefrom.from_date + "' AND '" + dateto.to_date + "' GROUP BY "+helper.TX_NAME, null); 

Примечание: Вы можете использовать имена столбцов вместо "*" в запросе на выборку.

Cursor c = db.rawQuery("SELECT "+ helper.TX_NAME+","+ helper.TX_PARTICULARS+","+ helper.TX_AMOUNT+","+ helper.TX_DATE +" FROM " + VivzHelper.TX_TABLE+ " where '"+ helper.TX_ID + "'='" + name + "' AND " + helper.TX_DATE + " BETWEEN '" + datefrom.from_date + "' AND '" + dateto.to_date + "' GROUP BY "+helper.TX_NAME, null); 
+0

Я использовал как: Cursor c = db.rawQuery ("SELECT helper.TX_NAME, helper.TX_PARTICULARS, helper.TX_AMOUNT, helper.TX_DATE FROM" + VivzHelper.TX_TABLE + "где" "+ helper.TX_ID +" '=' " + name + "'AND" + helper.TX_DATE + "BETWEEN'" + datefrom.from_date + "'AND'" + dateto.to_date + "'GROUP BY" + helper.TX_NAME, null); Я получаю исключение вроде: Вызвано: android.database.sqlite.SQLiteException: нет такого столбца: helper.TX_NAME (код 1): при компиляции: SELECT helper.TX_NAME, helper.TX_PARTICULARS, helper.TX_AMOUNT, helper.TX_DATE FROM транзакций, где 'txid' = 'E' AND date BETWEEN – user3144078

+0

см. Отредактированный ответ – BSavaliya

+0

Если вы все еще получаете проблему, тогда скажите мне – BSavaliya

Смежные вопросы