mysql使用技巧-列转行

100人浏览   2025-02-09 00:08:13

一、原始记录

在calculate_type列中有6个逗号格开的值;需要把这6个值取出来,放到每一行。

二、转换之后的最终效果

三、实现思路

1、首先要了解一个函数的用法

substring_index(string,sep,num)

参数说明:

string:用于截取目标字符串的字符串。可为字段,表达式等。

sep:分隔符,string存在且用于分割的字符,比如“,”、“.”等。

num:序号,为非0整数。若为整数则表示从左到右数,若为负数则从右到左数。

如:

SELECT SUBSTRING_INDEX("www.wmdy.com",'.',1)

返回值:www

SELECT SUBSTRING_INDEX("www.wmdy.com",'.',2)

返回值:www.wmdy

SELECT SUBSTRING_INDEX("www.wmdy.com",'.',-1)

返回值:com

SELECT SUBSTRING_INDEX("www.wmdy.com",'.',-2)

返回值:wmdy.com

2、从上面的函数参数中能看出,需要有一个序号参数(num)

SELECT ROW_NUMBER() OVER(ORDER BY A.id) AS row_num FROM cw_calculate_type A

用ROW_NUMBER()函数拿到行号,只要这行号的最大值大于calculate_type列中值的个数就行。

3、完整的SQL

SUBSTRING_INDEX(SUBSTRING_INDEX(B.calculate_type,',',A.row_num),',',-1)

这个sql的效果是取出前面几个值的最后一个值。

LENGTH(B.calculate_type)-LENGTH(REPLACE(B.calculate_type,',',''))+1

这个SQL中算出calculate_type列中有多少个值。

相关推荐