天天看點

mysql使用技巧-列轉行

作者:腳踢用友拳打金蝶

一、原始記錄

mysql使用技巧-列轉行

在calculate_type列中有6個逗号格開的值;需要把這6個值取出來,放到每一行。

二、轉換之後的最終效果

mysql使用技巧-列轉行

三、實作思路

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

mysql使用技巧-列轉行

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

繼續閱讀