mysql使用技巧-列转行
一、原始记录

在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列中有多少个值。