首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL旋转行和列

MySQL旋转行和列
EN

Stack Overflow用户
提问于 2015-11-15 09:41:15
回答 1查看 51关注 0票数 0

我有一个包含一些用户数据的表,还有一个带有用户属性数据的表。属性总是2,我知道它们的名字。我需要一个查询来检索单个结构中的所有内容。但是,我不能更改数据库模式。

这是我的数据库的简化版本:

用户

代码语言:javascript
复制
+-------------------+--------------+------+-----+---------+-------+
| Field             | Type         | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| username          | varchar(64)  | NO   | PRI | NULL    |       |
| name              | varchar(100) | YES  |     | NULL    |       |
+-------------------+--------------+------+-----+---------+-------+

USER_PROPERTIES

代码语言:javascript
复制
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| username  | varchar(64)  | NO   | PRI | NULL    |       |
| propName  | varchar(100) | NO   | PRI | NULL    |       |
| propValue | text         | NO   |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

因此,例如,有了以下数据:

用户

代码语言:javascript
复制
username         name
1                User1
2                User2

USER_PROPERTIES

代码语言:javascript
复制
username         propName         propValue
1                status           "At work"
1                picture          "pict1.jpg"
2                status           "Busy"
2                picture          "pict2.jpg"

我需要以下结果:

代码语言:javascript
复制
username         name             STATUS          PICTURE
1                User1            "At work"       "pict1.jpg"
2                User2            "Busy"          "pict2.jpg"

我在互联网上做了一些研究,显然这是通过支点实现的,但是MySQL不包含这个功能。通过遵循这里的答案:MySQL pivot table,我可以设法得到以下内容:

代码语言:javascript
复制
select ou.username, 
    case when (oup.propName='status') then oup.propValue end as 'STATUS',
    case when (oup.propName='picture') then oup.propValue end as 'PICTURE'
from User ou, User_Properties oup
where ou.username = oup.username;

username         name             STATUS          PICTURE
1                User1            "At work"       null
1                User1            null            "pict1.jpg"
2                User2            "Busy"          null
2                User2            null            "pict2.jpg"

结果在两条不同的线上。如果将结果按用户名分组,则图片数据始终为null:

代码语言:javascript
复制
select ou.username, 
    case when (oup.propName='status') then oup.propValue end as 'STATUS',
    case when (oup.propName='picture') then oup.propValue end as 'PICTURE'
from User ou, User_Properties oup
where ou.username = oup.username
group by oup.username;

username         name             STATUS          PICTURE
1                User1            "At work"       null
2                User2            "Busy"          null

我遗漏了什么?谢谢。

编辑:https://stackoverflow.com/users/1529673/strawberry给出了解决方案:

代码语言:javascript
复制
select ou.username, 
    MAX(case when (oup.propName='status') then oup.propValue end) as 'STATUS',
    MAX(case when (oup.propName='picture') then oup.propValue end) as 'PICTURE'
from User ou, User_Properties oup
where ou.username = oup.username;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 09:58:46

https://stackoverflow.com/users/1529673/strawberry给出了解决方案:

代码语言:javascript
复制
select ou.username, 
    MAX(case when oup.propName='status' then oup.propValue end) as 'STATUS',
    MAX(case when oup.propName='picture' then oup.propValue end) as 'PICTURE'
from User ou
Join User_Properties oup
On ou.username = oup.username;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33718280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档