Mysql 将多行转换为列
我正在尝试从MySQL数据库中检索数据。 表(Mysql 将多行转换为列,mysql,sql,Mysql,Sql,我正在尝试从MySQL数据库中检索数据。 表(Tab_1)的结构如下: id key value 1 address xyz 1 post_code 120 1 country CA 如您所见,这实际上是订单详细信息 我想将键列转换为实际列,将值转换为该列的值。 意思是: 其中,id=1是此订单的键 MySQL中的表无法更改。它是我们使用的封闭系统(WordPress插件)的一部分。我只想写一个查询,从中获取一些数据 我的目标是在联接中使用它,以便更容易
Tab_1
)的结构如下:
id key value
1 address xyz
1 post_code 120
1 country CA
如您所见,这实际上是订单详细信息
我想将键列转换为实际列,将值转换为该列的值。
意思是:
其中,id=1
是此订单的键
MySQL中的表无法更改。它是我们使用的封闭系统(WordPress插件)的一部分。我只想写一个查询,从中获取一些数据
我的目标是在联接中使用它,以便更容易获取数据:
Select x.address ,x.post_code, x.country
from orders
join (...) as x using (order_id=id)
where order_id=1
它应提供:
address post_code country
------------------------------------
xyz 120 CA
如您所见,假设得到x的所有字段,即地址、邮政编码、国家等。
联接中的…
是我需要将查询转换为联接的可读结构的地方
如何操作?根据进行分组,对不同的键类型使用大小写表达式:
select id,
max(case when key = 'address' then value end) as address,
max(case when key = 'post_code' then value end) as post_code,
max(case when key = 'country' then value end) as country
from orders
group by id
按分组,对不同的键类型使用大小写表达式:
select id,
max(case when key = 'address' then value end) as address,
max(case when key = 'post_code' then value end) as post_code,
max(case when key = 'country' then value end) as country
from orders
group by id
您只能使用4个选项:
SELECT id, (SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'address') AS address,
(SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'post_code') AS post_code,
(SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'country') AS country FROM Tab_1
GROUP BY id;
您只能使用4个选项:
SELECT id, (SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'address') AS address,
(SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'post_code') AS post_code,
(SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'country') AS country FROM Tab_1
GROUP BY id;
GROUP BY,不同键类型的大小写表达式,.GROUP BY无法解决此问题。它不会将值转换为列。。请注意,
key
应成为一列,value
应成为此列中的值。当我在selectx.address
中说时,我希望它给我xyz
。分组方式,不同键类型的大小写表达式。分组方式无法解决此问题。它不会将值转换为列。。请注意,key
应成为一列,value
应成为此列中的值。当我在selectx.address
中说时,我希望它给我xyz
。来选择非空值。您也可以使用MIN。(我假设每个id只有一个地址/邮政编码/国家)是的,只有一个。。。这就是为什么我不理解为什么需要max或min…如果一个id有3行,case表达式返回“null,null,value”。使用max或min选择非空值。选择非空值。您也可以使用MIN。(我假设每个id只有一个地址/邮政编码/国家)是的,只有一个。。。这就是为什么我不理解为什么需要max或min…如果一个id有3行,case表达式返回“null,null,value”。使用max或min选择非空值。如果要这样做,至少要有相关的子查询。(现在您总是返回id=1的值。)如果您这样做,至少有相关的子查询。(现在您总是返回id=1的值。)