简体   繁体   English

如何将多行合并为一行?

[英]how to combine multiple rows into one row?

My table:我的表:

id  val
--------
 a   1   
 a   2
 a   3
 b   7
 b   8
 b   9
 b   10

What i want to get is:我想得到的是:

id  val1  val2  val3  val4
--------------------------
a    1     2     3    null
b    7     8     9     10

Is there any simple way for this?有什么简单的方法吗?

If you are using MySQL 8+, then ROW_NUMBER combined with pivoting logic provides one way:如果您使用的是 MySQL 8+,那么ROW_NUMBER结合透视逻辑提供了一种方法:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY val) rn
    FROM yourTable
)

SELECT
    id,
    MAX(CASE WHEN rn = 1 THEN val END) AS val1,
    MAX(CASE WHEN rn = 2 THEN val END) AS val2,
    MAX(CASE WHEN rn = 3 THEN val END) AS val3,
    MAX(CASE WHEN rn = 4 THEN val END) AS val4
FROM cte
GROUP BY
    id;

Not quite the same output, but worth considering:不完全相同的输出,但值得考虑:

SELECT id, GROUP_CONCAT(val)
    FROM tbl GROUP BY id;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM