2017-03-14 11 views
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

임시로 원하면 이름과 값이 모두 필요한 경우 List 또는 Map에 결과를 쉽게 저장할 수 있습니다. –

+0

ID를 반복 할 수 없습니다. 고유해야합니다. 따라서 여러 행에 대해 동일한 ID를 사용할 수 없습니다. –

+0

답장을 보내 주셔서 감사합니다 Darshan, 이미 MatrixCursor에 결과를 저장하고 있지만 CursorAdaptor를 사용할 때 복잡성이 많이 발생합니다. 가장 간단한 방법은 선택을 통해 기본 레이아웃에 데이터를 마사지하는 것입니다. My MatrixCursor가 이미 작동 중입니다. 좀 더 우아한 솔루션을 찾고 있습니다. @Vlad 좋은 지적입니다. 이미 ID 값을 알고 있기 때문에 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, 그럴 수도, 나는 그것을 줄께 다시보고. –