2014-04-13 2 views
0

Teradata 14을 모두 strtok 및 기타 새로운 기능과 함께 사용하지만 본인의 기능을 쓸 수 없습니다.Teradata에서 문자열을 연결하는 방법

다음 표에서 각 사람마다 많은 기술이 있습니다. 이 기술들을 어떻게 연결시킬 수 있습니까? 테이블 원하는

team person 
1  Mike (swi) 
1  Nick (dri) 
1  Mike (coo) 
2  
3  Kate (swi) 
3  Kate (coo) 
3  Kate (dri) 
3  Wend (fly) 
4  Pete (jum) 

내가 문자열을 연결할 수있는 방법

team person 
1  Mike (swi coo), Nick (dri), 
2  
3  Kate (swi coo dri), Wend(fly), 
4  Pete (jum), 

입니까?

+0

스킬과 사람 이름을 별도의 열로 사용할 수 있습니까? – emaillenin

+0

. 모든 이름은 4 자이고 모든 스킬은 3 자이기 때문에 'substring (person, 1,4)'과'substring (person (6,8)' –

+1

다음과 같은 두 개의 새로운 컬럼을 생성 할 수 있습니다. 이것은 http://stackoverflow.com/questions/23021930/how- to-group-substrings-in-teradata-14 같은 회사에서 비정규 화 된 데이터로 같은 문제를 해결하려고 노력하고 있습니까? – dnoeth

답변

2

UDF를 사용하지 않고 이러한 작업을 수행하려면 재귀 쿼리를 사용해야합니다. 나는 당신에게 기술을 집계하는 쿼리를 제공하여 최종 결과를 얻는 비슷한 접근법을 사용합니다.

CREATE Volatile Table TempTable1 
as 
(
SELECT 
team 
,substr(person,0,Index(trim(person),'(')) as name 
,substr(person,Index(person,'(')+1,3) as skill 
,Row_Number() Over(Partition by team,name order by skill) as rnk 
from 
MainTable) 
WITH DATA 
Primary Index(team,name) 
ON COMMIT Preserve Rows; 



CREATE VOLATILE TABLE temp_table2 (team,name) 
as 
(WITH RECURSIVE temp_table3 (team,name,skill,rnk,lev) 
AS 
(
SELECT team,name,cast(skill as varchar(1000)),rnk,1 as lev 
from TempTable1 
where rnk = 1 
UNION ALL 
SELECT t1.team,t1.name,t1.skill||','||t2.skill,t1.rnk,t2.lev+1 
FROM 
TempTable1 t1 
Inner join 
temp_table3 t2 
on t1.team = t2.team 
AND t1.name = t2.name 
AND t1.rnk = t2.rnk + 1 
) 
SELECT team,name||'('||skill||')' as new_name 
from temp_table3 
qualify rank() over (partition by team,name order by lev desc) = 1) 
WITH DATA 
ON COMMIT PRESERVE ROWS; 
관련 문제