2016-10-19 3 views
1

У меня есть три таблицы, такие как торговля, аванс и займы. Мне нужно создать список, показывающий сумму торговли, займа, а также аванс за каждый месяц, если месяц не иметь торговые средства, он должен отображать его как ноль, но вместо отображения значения как нуля он показывает суммарное значение предыдущих месяцев в следующем месяце, также может кто-нибудь сказать мне, где я ошибаюсь в этом вопросе, так как у меня очень мало знаний в SQLite.Те же значения повторяются в запросе базы данных sqlite

SELECT strftime('%m-%Y', tradedate) as 'month', 
    (SELECT IFNULL (SUM(tradebalanceamount),0) 
     FROM farmertradelabel 
     WHERE farmertradelabel.mobileno = ' 9486032141 ' 
     ORDER BY strftime('%m-%Y', farmertradelabel.tradedate) DESC) AS tradeamount, 
    (SELECT IFNULL (SUM(advanceamount),0) 
     FROM advancelabel 
     WHERE advancelabel.mobileno = '9486032141' 
     ORDER BY strftime('%m-%Y', advancelabel.advancedate) DESC) AS advanceamount, 
    (SELECT IFNULL (SUM(loantotalamount),0) 
     FROM loanlabel 
     WHERE loanlabel.mobileno = '9486032141' 
     ORDER BY strftime('%m-%Y', loanlabel.loandate) DESC) AS loanamount 
FROM farmertradelabel 

Структура таблицы:

Столик Торговца:

String CREATE_FARMERTRADE_TABLE = "CREATE TABLE " + FARMERTRADE_LABELS + "(" 
      + TRADE_ID + " INTEGER PRIMARY KEY," 
      + TRADE_DATE + " TEXT," 
      + TRADE_MOBNO + " TEXT," 
      + TRADE_COCONUTTYPE + " TEXT," 
      + TRADE_TOTALCOCONUT + " TEXT," 
      + TRADE_COCONUTCOST + " TEXT," 
      + TRADE_TOTALAMOUNT + " TEXT," 
      + TRADE_AMOUNTPAID + " TEXT," 
      + TRADE_BALANCEAMT + " TEXT" + ");"; 
    db.execSQL(CREATE_FARMERTRADE_TABLE); 

Advance Таблица:

String CREATE_ADVANCE_TABLE = "CREATE TABLE " + ADVANCE_LABELS + "(" 
      + ADVANCE_ID + " INTEGER," 
      + ADVANCE_DATE + " TEXT," 
      + ADVANCE_USERTYPE + " TEXT," 
      + ADVANCE_MOBNO + " TEXT PRIMARY KEY," 
      + ADVANCE_AMOUNT + " TEXT," 
      + ADVANCE_REASON + " TEXT" + ");"; 
    db.execSQL(CREATE_ADVANCE_TABLE); 

займа Таблица:

String CREATE_LOAN_TABLE = "CREATE TABLE " + LOAN_LABELS + "(" 
      + LOAN_ID + " INTEGER," 
      + LOAN_DATE + " TEXT," 
      + LOAN_USERTYPE + " TEXT," 
      + LOAN_MOBNO + " TEXT PRIMARY KEY," 
      + LOAN_AMOUNT + " TEXT," 
      + LOAN_INTEREST + " TEXT," 
      + LOAN_PERIOD + " TEXT," 
      + LOAN_DUEDATE + " TEXT," 
      + LOAN_REASON + " TEXT," 
      + LOAN_TOTALAMOUNT + " TEXT" + ");"; 
    db.execSQL(CREATE_LOAN_TABLE); 

Выход:

output

+0

переформатировать запрос SQL варианта для лучшей читаемости –

+1

Некоторые из значений только суммы таблицы Они не имеют какую-либо проверок даты на них, на основе месяца вы проверяете для. Таким образом, каждая строка SUM та же самая вещь – Doomsknight

+0

Опубликуйте структуру таблиц, чтобы помочь вам – crgarridos

ответ

0

Смотрите, если выполнение следующих работ для advancedamount и loanamount полей. В принципе, вам нужно проверить, что месяц является месяцем текущей строки, и SUM это, иначе исключить его. Использование предложения where.

SELECT strftime('%m-%Y', tradedate) as 'month', 
    (SELECT IFNULL (SUM(FTL.tradebalanceamount),0) 
     FROM farmertradelabel as FTL 
     WHERE FTL.mobileno = '9486032141' AND strftime('%m-%Y', FTL.tradedate) = strftime('%m-%Y', farmertradelabel.tradedate) 
     ORDER BY strftime('%m-%Y', FTL.tradedate) DESC) AS tradeamount, 
    (SELECT IFNULL (SUM(advanceamount),0) 
     FROM advancelabel 
     WHERE advancelabel.mobileno = '9486032141' AND strftime('%m-%Y', advancelabel.advancedate) = strftime('%m-%Y', farmertradelabel.tradedate) 
     ORDER BY strftime('%m-%Y', advancelabel.advancedate) DESC) AS advanceamount, 
    (SELECT IFNULL (SUM(loantotalamount),0) 
     FROM loanlabel 
     WHERE loanlabel.mobileno = '9486032141' AND strftime('%m-%Y', loanlabel.loandate) = strftime('%m-%Y', farmertradelabel.tradedate) 
     ORDER BY strftime('%m-%Y', loanlabel.loandate) DESC) AS loanamount 
FROM farmertradelabel 

tradeamount требует, чтобы сделать еще один шаг дальше и добавить псевдоним к столу, как вы используете один и тот же имя таблицы дважды.

Модифицированный пример выше, включить

+0

показывает мне такую ​​функцию lstrftime –

+0

@RameshR Извините, что это опечатка, должно быть 'strftime' – Doomsknight

+0

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

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