sql - 将多行的值连接到一列中

标签 sql teradata

源数据:

COLA    COLB   COLC
1       BO     AFV
1       BO     AKG
1       BO     UYD
2       BOS    KJHSDKJ
2       BOS    YWI
3       POS    JHSFJH
3       POS    IUXN

我想要的结果如下:

COLA    COLB    COLC
1       BO      AFV, AKG,UYD
2       BOS     KJHSDKJ,YWI
3       POS     JHSFJH,IUXN

COLA、COLB 是关键列。

最佳答案

这是一个可以完成这项工作的递归查询:

WITH RECURSIVE REC_VIEW (COLA, COLB, ROLL_UP, COLC) 
AS
(
SELECT COLA
     , COLB
     , MIN(COLC) (VARCHAR(1000))
     , MIN(COLC)
FROM  your_table
GROUP BY 1,2
UNION ALL
SELECT B.COLA
     , B.COLB
     , B.ROLL_UP || ',' || A.COLC
     , A.COLC
FROM   your_table A 
INNER JOIN REC_VIEW B
ON    A.COLA = B.COLA
  AND A.COLB = B.COLB
  AND A.COLC > B.COLC
)

SELECT COLA, COLB, ROLL_UP as COLC
FROM REC_VIEW

QUALIFY ROW_NUMBER() OVER (PARTITION BY COLA, COLB
                           ORDER BY CHARACTER_LENGTH(ROLL_UP) DESC) = 1

我希望我了解如何更好地格式化答案;我所有的“漂亮”间距都消失了。希望这一点是清楚的。

关于sql - 将多行的值连接到一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13074719/

相关文章:

Teradata LEFT() 函数问题

sql - 拆分字符串 Teradata SQL

sql - 是否可以从一个表中使用 CASE 语句列出所有可能的用户角色? [寺数据]

c# - 如何从特定单词中删除部分字符串?

sql - T-SQL : Convert datatime2 to datetime for all columns of type datetime2

mysql - 将 MySQL PK 声明为唯一的唯一键

mysql - 查询多个表的总和

loops - 在Teradata中捕获插入错误

sql - 根据 teradata 中表 2 的值更新表 1

SQL:如何以某种任意方式对查询结果进行排序/排序?