SQL 如何将每 5 个值合并到 1 条记录 *

有数据库表TBL_FILE,数据如下所示:

FILE

B.jpg

X.jpg

H.png

C.png

A.gif

G.pdf

Y.docx

U.jpeg

需要每5个值合并到1条记录,结果如下所示:

A

B

C

D

E

B.jpg

X.jpg

H.png

C.png

A.gif

G.pdf

Y.docx

U.jpeg



MySQLSQL

SELECT MAX(CASE

                        WHEN RN % 5 = 0 THEN FILE

            ENDAS FILEA

            , MAX(CASE

                        WHEN RN % 5 = 1 THEN FILE

            ENDAS FILEB

            , MAX(CASE

                        WHEN RN % 5 = 2 THEN FILE

            ENDAS FILEC

            , MAX(CASE

                        WHEN RN % 5 = 3 THEN FILE

            ENDAS FILED

            , MAX(CASE

                        WHEN RN % 5 = 4 THEN FILE

            ENDAS FILEE

FROM (

            SELECT T.*, ROW_NUMBER() OVER (ORDER BY ID) - 1 AS RN

            FROM TBL_FILE T

) T

GROUP BY FLOOR(RN / 5)

这道题其实很简单,建立一个5列的空表,再依次将各值逐列、逐行地追加至该表即可。但是SQL写起来就很麻烦了,需要额外的id列确保顺序,再通过繁琐的办法人为造出序号,最后利用序号再将数据拆成5列。如果遇到动态列的情况,SQL就更难写了。

用开源集算器的SPL就很容易写:


A

1

=connect("mysql")

2

=A1.query@xi("SELECT * FROM TBL_FILE")

3

=create(A,B,C,D,E).record(A2)

SPL直接支持动态数据结构和有序计算,很容易将多个值按次序追加至表中。

问答搜集

https://stackoverflow.com/questions/64133340/how-to-convert-mysql-rows-to-a-column-of-5