比如一个单子,多个收据单用逗号隔开,怎么把这一个单子所有收据单独展示出来,行转成列呢?
![ae2ae719253f515fd988a08b164e325a.png](https://i-blog.csdnimg.cn/blog_migrate/c572a14228fedf45386425e5ec89150b.png)
方法一:
这里需要用到循环,首先创建一个1-10的序列:
SELECT
@rownum :=@rownum + 1 AS seq
FROM
(SELECT @rownum := 0) r,
bills
LIMIT 0,10
其次依次运用
SUBSTRING_INDEX(b.receipt_no, ',', seq)
从左到右取单据,
再用
CONCAT(SUBSTRING_INDEX(b.receipt_no, ',', seq - 1),',')
取它前面的多余的单据,加上逗号,
最后用replace函数把前面多余取数替换成空值。
循环次数由收据多少决定,这里收据单号都是7位,把逗号替换掉之后除以7即得收据多少。
![86fab8890a1061799caf86ffd53930a0.png](https://i-blog.csdnimg.cn/blog_migrate/765a6dd345811bb9bb8608fb84a850b8.jpeg)
方法二:
利用Mysql自带的表help_topic里的help_topic_id作为循环序列,
收据大小等于逗号个数+1。
以取出第二个为例,当序号等于2的时候,
先取出前两个0026704,1006327,然后再反向从右到左取出第二个。
![ab3755cf36830e734cf72962be129eb0.png](https://i-blog.csdnimg.cn/blog_migrate/cb6efaf9207f177c06c01f9b8171e81a.jpeg)