有一个表类似下面的结构
|id|key|value|
| 1 | a | 123 |
| 1 | b | 456 |
| 1 | c | 789 |
我现在想要这样的结果
|id| a | b | c |
|1|123|456|789|
请问如何实现
1
caoyue 2015-10-21 15:59:51 +08:00
取决于你用的什么数据库
如果是 Oracle 或者 SqlServer ,用 PIVOT MySQL 的话,我能想到的动态的行转列好像只能自己先 select 行出来,然后再根据上一步的结果拼成 select a,b,c,.. 这样的查询语句了 |
2
a591826944 2015-10-21 16:03:18 +08:00
mysql 我估计 就不如 查出来 自己用程序拼了
|
3
ivvei 2015-10-21 16:26:31 +08:00
你这个给的示例内容还是略少,不清楚具体数据咋样的。我猜测一下啊,你这里的 id 都是 1 ,那是不是还存在着 id = 2, key = a 。。。。 这样的数据?如果存在的话,那么每个 id 下的 key 都是 a,b,c 三个么? 如果每个 id 下的 key 的数量不同,那你这个查询很难办啊,转换后每行的列数都不同了…… 而如果每个 id 下的 key 是相同的,那你可以考虑用 case when 配合聚合函数来写, 这种写法 mysql 应该也能使。
|
5
delavior OP @a591826944 不是 mysql ,是 oracle
|
6
delavior OP @ivvei 对, id 还存在其他的,但是对于每个 id 来说, a 、 b 、 c 是固定的,只是它的值不一样。试了下, case when 好像不能用于起别名;配合聚合函数怎么用,没想明白,能详细说下吗
|