oracle的wm_concat()和mysql的group_concat()合并同列变成一行的用法,多列拼接成一行

1.1 oracle语法wmsys.wm_concat():
SELECT
NAME,
wmsys.wm_concat(subject_1) subject_1
FROM
table_name
GROUP BY
NAME
1.2 oracle语法LISTAGG()(注意,此为Oracle 11g及以上版本提供的语法):
LISTAGG(measure_expr [,‘delimiter’])WITHIN GROUP (order_by_clause) [OVER query_partition_clause]
参数 说明
OVER 使用 OVER 子句定义窗口进行计算。
measure_expr 可以是任何表达式。度量列中的空值将被忽略。
delimiter 指定用于分隔度量值的字符串。此子句是可选的,默认为 NULL。
SELECT
NAME, listagg(subject_1 , ‘,’) within GROUP (ORDER BY NAME)
FROM table_name
GROUP BY NAME
2.1 oracle语法wmsys.wm_concat():

oracle中通过wm_concat(),即可以实现对多列的拼接:

select NAME, wmsys.wm_concat(age || ‘|’ || address) msg
from TK_USER_INFO
group by NAME;

注意:

1、上述SQL中|| ‘|’ || 表示两个列以|分隔,'|'可以换为任意分隔符

1.3 mysql语法group_concat:
SELECT
NAME,
GROUP_CONCAT(distinct subject_1 order by subject_1 asc separator ‘,’) subject_1
FROM
table_name
GROUP BY
NAME
2.2 mysql 语法CONCAT()

select name, CONCAT(age ,address) msg from tk_user_info;

注意:

1、CONCAT拼接的结果不带分隔符

2、如果右任意拼接列为null,则返回null
2.3 mysql 语法CONCAT_WS()

select name, CONCAT_WS(‘,’,age ,address) msg from tk_user_info;

注意:

1、此函数可以定义分隔符,CONCAT_WS() 代表 CONCAT With Separator

2、其语法为CONCAT_WS(separator,str1,str2,…),第一个参数为分隔符,其他为拼接列
2.4 mysql 语法GROUP_CONCAT()

select name, GROUP_CONCAT(age,‘,’,address) msg from tk_user_info group by name;

注意:

1、其语法为(像上面多行拼接的解释中一样,可以进行去冗余、排序、分隔符-可以不同的拼接列后面有不同的分隔符):

GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col …]]
[SEPARATOR str_val])

2、此sql用于对某列分组后的各列拼接,因此SQL后必须带有group by

猜你喜欢

转载自blog.csdn.net/qq_34690003/article/details/131132528
今日推荐