加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Teradata实现字符串拼接

(2013-04-18 10:57:31)
分类: 技术

这里说的“字符串拼接”指:把key值相同的val拼接起来。

例,

源表(src_tble)如下:

k_y   val

------------------

k1     v1

k1     v2

k2     v1

k2     v2

k2     v3

 

拼接后(dst_tbl):

k_y  concat_val

------------------

k1    v1,v2

k2    v1,v2,v3

 

用teratada sql的实现方式分如下两步。

 

步骤一(将源表用分析函数结构化):

CREATE MULTISET VOLATILE TABLE VT1 AS(
   SELECT
       k_y               k
     , val               v
     , ROW_NUMBER() OVER (PARTITION BY k ORDER BY v asc) id
FROM src_tble a) WITH DATA PRIMARY INDEX(k_y) ON COMMIT PRESERVE ROWS;


此时VT1的表结构和数据是这样的:

k   v      id

------------------

k1  v1       1

k1  v2      

k2  v1       1

k2  v2       2

k2  v3       3


其中红色的(id = 1的)被认为是父节点,用以找到其下所有的子节点,使用情况参考步骤二。


步骤二:

INSERT INTO dst_tbl

(
    k_y

  , concat_val

)

WITH RECURSIVE rec 

(

     k
  v
   , ID

)
AS
(
SELECT
    k

 v

  , id

FROM VT1

WHERE id = 1
UNION ALL
SELECT 

     t1.k

   , t1.v || ',' || t2.v

   , t2.id

FROM rec t1,VT1 t2
WHERE  T1.k = T2.k
AND T1.ID=T2.ID-1
)SELECT k,v FROM rec                     

QUALIFY ROW_NUMBER() OVER (PARTITION BY rec.k ORDER BY rec.v DESC)=1
;

 

注:以上sql乃未经测试的代码(可以认为是伪代码),仅仅给出思路,使用者可自如修改删取。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有