gpt4 book ai didi

mysql - 我需要将 mysql 中的数据转置为第一列中的重复值和第二列中的唯一值

转载 作者:可可西里 更新时间:2023-11-01 08:10:10 26 4
gpt4 key购买 nike

有如下信息表:

id | job | code
1 | 100 | ab123
2 | 100 | ab124
3 | 101 | ab125
4 | 101 | ab126
5 | 101 | ab127
6 | 102 | ab128
7 | 102 | ab129
8 | 103 | ab130
9 | 104 | ab131

我需要获取下表才能在其他查询中使用这 3 个代码:

job | code1 | code2 | Code3
100 | ab123 | ab124 |
101 | ab125 | ab126 | ab127
102 | ab128 | ab129 |
103 | ab130 | |
104 | ab131 | |

永远只有 3 个代码。

提前致谢

最佳答案

这对于 MySQL 来说有点棘手(与其他具有窗口和数据透视功能的数据库相比),但您可以通过使用一个查询来完成此操作,该查询将每组作业项中的行编号作为派生表并将其用作源对于具有条件聚合的外部查询:

select 
job,
max(case when rn = 1 then code end) as Code1,
max(case when rn = 2 then code end) as Code2,
max(case when rn = 3 then code end) as Code3
from (
select id,
code,
case job
when @grp then @row := @row + 1
else @row := 1
end as rn,
@grp := job as job
from Table1 t
join (select @row := 0, @grp := '') r
order by id, job
) s
group by job

我假设 Code 项目应该按 ID 排序,但如果你想按 Code 排序,只需更改派生表中的 order by 子句即可。

编号部分基于对 this question 的回答.

Sample SQL Fiddle

示例输出:

| job | Code1 |  Code2 |  Code3 |
|-----|-------|--------|--------|
| 100 | ab123 | ab124 | (null) |
| 101 | ab125 | ab126 | ab127 |
| 102 | ab128 | ab129 | (null) |
| 103 | ab130 | (null) | (null) |
| 104 | ab131 | (null) | (null) |

关于mysql - 我需要将 mysql 中的数据转置为第一列中的重复值和第二列中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com