2017-11-21 1 views
0

表Aおよび表BにPR_NAME、量、日付のような三つのフィールドで構成されている。【同じ】がどのように月ごとに2つのテーブルの列の項目群を合計することができる使用してSQLiteの

PR_NAME量日付

紙100 2017- 01-10

紙50 2017年1月30日

ペン100 2017年5月10日

ペン200 2017年5月30日

0同じA.expected結果セットとして

紙500 2017年11月21日

テーブルBは:

MONTH_NAME表A表B

1月150 150

2月0

...... ......

may300300

....

11月500 500

エラー:

android.database.sqlite.SQLiteException周辺 "行ID":構文エラー(コード1)、コンパイル中:SELECT CASE rowid時1 '時' '時' '時2'時 'feb' 3時 ''時 '4時' 4時 '4時5時'時 '時6'時 '時'時7 '時'時 '時8時' ug '時( '%Y'、e_dates)= '2017' AND( '%Y'、e_dates)= '2017'を返します。 AS 'テーブルA'、(SELECT SUM(i_amount) ( '%Y'、i_dates)= '2017'とCAST(strftime( '%m'、e_dates)AS整数)= c.rowid)AS 'テーブルB'FROMレコードA cWHERE rowid BETWEEN 1 AND 12 ########################## ############ エラーコード:1(SQLITE_ERROR) 原因:SQL(クエリ)エラーまたはデータベースがありません。( "rowid"の近く:構文エラー(コード1):コンパイル中に:SELECT CASE ROWID WHEN 1 THEN 'JAN' WHEN 2 THEN 'FEB' WHEN 3 THEN 'MAR' 4 'THEN' 4 'THEN' THEN ' '時6'時 '時'時7時 '時'時 '時8時'時 '時'時10時 '時10分'時11時 '前回12時' Month 'として、(SELECT SUM ( '%Y'、e_dates)= '2017' AND CAST(strftime( '%m'、e_dates)AS整数)= c.rowid)AS 'テーブルA'、(SELECT SUM(i_amount) ) '%Y'、i_dates)= '2017' AND CAST(strftime( '%m'、e_dates)AS整数)= c.rowid)AS 'テーブルB'FROMレコードAのcWHERE rowid BETWEEN 1と12 ) ################################################# ##########

答えて

0

strftimeを使用してsqliteから月名を取得する方法はありませんcase文を使って1、2、3 ...を月名に変換する必要があります。特定の月のデータがなくてもすべての月を確実に取得できるように、rowidで1から12までの数値を生成できます。これには少なくとも12行のテーブルを使用します。そして、サブクエリで、我々はこれらの月のために必要な集計データを取得することができます。

SELECT CASE c.rowid WHEN 1 THEN 'jan' WHEN 2 THEN 'feb' WHEN 3 THEN 'mar' 
    WHEN 4 THEN 'apr' WHEN 5 THEN 'may' WHEN 6 THEN 'jun' 
    WHEN 7 THEN 'jul' WHEN 8 THEN 'aug' WHEN 9 THEN 'sep' 
    WHEN 10 THEN 'oct' WHEN 11 THEN 'nov' WHEN 12 THEN 'dec' END as Month_name, 
(SELECT SUM(amount) FROM TableA WHERE strftime('%Y', "date") = '2017' 
AND CAST(strftime('%m', "date") AS Integer) = c.rowid) AS 'Table A', 
(SELECT SUM(amount) FROM TableB WHERE strftime('%Y', "date") = '2017' 
AND CAST(strftime('%m', "date") AS Integer) = c.rowid) AS 'Table B' 
FROM TableX c 
WHERE c.rowid BETWEEN 1 AND 12 

注:CASTは必要ありませんが、それはそれは、明示的にする方が良いでしょう。 TableXはTableAにすることができます。

+0

構文エラーROWIDの近くに、エラーコード:1 –

+0

これは「このようなテーブルはありません」です。 TableA、TableB、TableXの独自のテーブル名を使用しましたか? – itsLex

+0

Yes.iはテーブル名TableA、TableBのみを変更し、TableXでは変更しません。 –

関連する問題