2017-03-14 4 views
1

複数のカラムを持つ単一のローを返すクエリを、1つまたは複数のカラムを持つ複数のローに変換しようとしています。例として、私のクエリが可視化され、次のようになります。SQLiteカラムをローにする

SELECT _id, value1, value2, value3, value4 FROM table WHERE _id IS 1; 

結果:

_id value1 value2 value3 value4 
---------------------------------------- 
1  10  11  12  13 

私は私の結果を持っていると思いますが、以下のようになります。

name value 
-------------- 
value1 10 
value2 11 
value3 12 
value4 13 

が、私はすることもできます次のようなもので作業してください:

value 
----- 
10 
11 
12 
13 

現在、AndroidのMatrixCursorを使ってこれを手動で変換していますが、カーソルをすでに使用可能な状態にするのが理想的です。目的のスキーマで結果を取得するためにクエリを変更する方法や、目的の終了状態を達成するために一時テーブルのようなものを使用する方法がありますか?

また、この機能をデータベース内に記述するための共通用語はありますか?

+0

一時的にしたい場合は、名前と値の両方が必要な場合は、リストまたはマップに結果を簡単に保存できます。 –

+0

IDを繰り返すことはできません。ユニークでなければなりません。したがって、複数の行に同じIDを割り当てることはできません。 –

+0

Darshanの返答をありがとう、私はすでにMatrixCursorに結果を格納していますが、CursorAdaptorを使用すると複雑さが増します。最も簡単な方法は、選択したデータを優先レイアウトにマッサージすることです。私のMatrixCursorは既に機能していますが、私はより洗練されたソリューションを探しています。 @Vladそれは良い点ですが、私はすでに値を知っているのでIDを保持することに大変興味はありません(私はそれを使って質問しています)。しかし、主なポイントは、各結果の列をそれぞれ新しい行として追加することです。 –

答えて

0

これを自動的に行うことができる組み込みのメカニズムはありません。

SELECT _id, 'value1' AS name, value1 AS value FROM tab WHERE _id = 1 
UNION ALL 
SELECT _id, 'value2' AS name, value2 AS value FROM tab WHERE _id = 1 
UNION ALL 
SELECT _id, 'value3' AS name, value3 AS value FROM tab WHERE _id = 1 
UNION ALL 
SELECT _id, 'value4' AS name, value4 AS value FROM tab WHERE _id = 1; 

これは必ずしもないMatrixCursorよりも良く:あなたが列を知っている場合

、あなたは個別に各列を扱うクエリを作成することができます。

+0

CLさん、ありがとうございました。私はショットを付けて報告します。 –

関連する問題