样本数据
name | age |
张三 | 10 |
李四 | 10 |
王五 | 10 |
把10岁的名字转换到一行中
age | name的集合 |
10 | 张三,李四,王五 |
Oracle中listagg() WITHIN GROUP () 将多行合并成一行
SELECT
T.AGE
LISTAGG (T.NAME, ',') WITHIN GROUP (ORDER BY T.NAME) NAME
FROM
STUDENT T
WHERE
T.AGE= '10'
GROUP BY
T.AGE
Mysql中
SELECT
T.AGE
group_concat ( T.NAME ORDER BY AGE separator ',' )
FROM
STUDENT T
WHERE
T.AGE= '10'
GROUP BY
T.AGE
hive中
SELECT
id,CONCAT_WS(",",COLLECT_SET(T1.NAME))
FROM wails t1
GROUP BY t1.id
COLLECT_SET:函数只接受基本数据类型,它的主要作用是将某字段的值进行去重 汇总,产生 Array 类型字段
age name
1 ["hah"]
2 ["hah"]
10 ["张三","李四","王五"]
CONCAT_WS(separator, str1, str2,...):分隔符将被加到被连接 的字符串之间
age name
1 hah
2 hah
10 张三,李四,王五
CONCAT(string A, string B):返回输入字符串连接后的结果,支持任意个输入字 符串;
CONCAT_WS(",",collect_list(cast(customer_id as string)))
sqlserver行转列使用逗号拼接
详见我的另一篇博文stuff函数