2017-03-14 1 views
1

J'essaie de convertir une requête qui renvoie une seule ligne avec plusieurs colonnes en plusieurs lignes avec une ou plusieurs colonnes. À titre d'exemple ma requête ressemble à ce qui suit visualisé:Transformer les colonnes SQLite en lignes

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

RÉSULTAT:

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

Je voudrais que mes résultats ressembler à ce qui suit:

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

mais je peux aussi travailler avec quelque chose comme ceci:

value 
----- 
10 
11 
12 
13 

Actuellement je convertis manuellement ceci en utilisant un MatrixCursor dans Android, mais la situation idéale serait d'avoir le curseur déjà dans un état utilisable. Existe-t-il un moyen de modifier ma requête pour récupérer les résultats dans le schéma souhaité ou pour utiliser quelque chose comme une table temporaire pour atteindre l'état final souhaité?

De même, existe-t-il un terme commun pour décrire cette fonctionnalité dans une base de données?

+0

Si vous le souhaitez temporaire, vous pouvez facilement stocker le résultat dans une liste ou une carte si vous avez besoin d'un nom et d'une valeur. –

+0

l'ID ne peut pas répéter. Cela devrait être unique. Vous ne pouvez donc pas avoir les mêmes ID pour plusieurs lignes. –

+0

Merci pour la réponse Darshan, je stocke déjà le résultat dans un MatrixCursor, mais il provoque beaucoup de complexité lors de l'utilisation d'un CursorAdaptor. Le moyen le plus simple serait de masser les données dans la mise en page préférée à travers la sélection. Mon MatrixCursor fonctionne déjà, je cherche juste une solution plus élégante. @Vlad c'est un bon point, je ne suis pas très intéressé par la conservation de l'identifiant puisque j'en connais déjà la valeur (j'interroge avec). Mais le point principal est d'ajouter les colonnes de chacun des résultats comme une nouvelle ligne. –

Répondre

0

Il n'y a pas de mécanisme intégré qui pourrait le faire automatiquement.

Si vous connaissez les colonnes, vous pouvez construire une requête qui gère chaque colonne individuellement:

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; 

Ce n'est pas nécessairement mieux qu'un MatrixCursor.

+0

Merci CL, qui pourrait le faire, je vais essayer et rendre compte. –