2015-01-14 2 views
0

값을 1 쉼표로 구분 된 문자열로 결합하는 대신 group_concat과 비슷한 작업을 수행 할 수 있습니까? 테이블의 여러 열로 확장 할 수 있습니까? 처음에는 group_concat 값을 계획하고 문자열을 분할하여 필요한 열로 이동했지만 SQLite에는 분할 옵션이없고 SQLite에서 직접이 작업을 수행하는 것으로 제한됩니다 (다른 DB 또는 스크립팅 옵션을 사용할 수 있음).Sqlite - group_concat into columns?

필요한 보고서를 생성하려면 다음 표가 필요합니다.

Item | Owner | System 
 
---------------------- 
 
A | Bob | Sys1 
 
B | Bob | Sys1 
 
B | Sue | Sys1 
 
B | Bob | Sys2 
 
C | Bob | Sys3 
 
C | Sue | Sys3 
 
C | Jane | Sys3
는 동적으로이 형식으로/피벗이 밖으로 CONCAT해야합니다.

Item | Owner 1 | Owner 2 | Owner 3 | Owner 4 | Owner 5 | System 
 
---------------------------------------------------------------- 
 
A | Bob  |   |   |   |   | Sys1 
 
B | Bob  | Sue  |   |   |   | Sys1 
 
B | Bob  |   |   |   |   | Sys2 
 
C | Bob  | Sue  | Jane |   |   | Sys3

지금까지 소유자 컬럼에 관한 한, 기술적으로 어느 항목 당 5 개 이상의 소유자가 최대가해서는 안되며, 5 개 이상이있는 경우에도, 난 몰라 적어도 5 명이 나타나면 추가 소유자를 표시하는 데 신경을 써야합니다 (이 장면에서 어떤 5 가지도 중요하지 않음).

테이블의 "항목"을 무제한있을 수 있습니다 약 20 시스템 (시스템 카운트가 변경됩니다 불구하고)

만 SQLite는 사용이 가능 있는가?

답변

0

당신이

SQLLite는 분석 함수 ROW_NUMBER이없는

, 그것은 상관 서브를 사용 pivot 키워드 여기

우리가 생성하는 ROW_NUMBER이없는 달성하기 위해 테이블에 자동 증가 ID를 가질 필요가 이 선택에 따라 각 Item, System에 대한 5 명의 소유자를 기준으로합니다.

select Item,System, 
     max(case when rn =1 then Owner end) as Owner1, 
     max(case when rn =2 then Owner end) as Owner2, 
     max(case when rn =3 then Owner end) as Owner3, 
     max(case when rn =4 then Owner end) as Owner4, 
     max(case when rn =5 then Owner end) as Owner5 
from (
select Item, System, Owner, 
     (select count(*) from Table1 b where a.Item = b.Item and a.System = b.System 
                  and a.id >= b.id) as rn 
from Table1 a) T 
group by Item,System 
+0

그게 .... 감사합니다! – user3246693

+0

@ user3246693, 질문을 닫으려면 답변을 수락 할 수 있습니다 – radar

+0

죄송합니다, 허용합니다! – user3246693