Mysql SQL Server中基于ID的一列到多列
我有一个表结构: ID |类型|值Mysql SQL Server中基于ID的一列到多列,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有一个表结构: ID |类型|值 1封电子邮件abcd@xyz.com 1部电话12345 2部电话56789 2工作电话546789 我想把它变成 ID |电子邮件|电话|工作电话 1.abcd@xyz.com12345空值 2空56789 546789 谁能帮我解决这个问题。对不起,如果这个问题以前重复过 使用条件聚合: select id , max(case when type = 'email' then value end) as email , max(case
1封电子邮件abcd@xyz.com
1部电话12345
2部电话56789
2工作电话546789
我想把它变成 ID |电子邮件|电话|工作电话
1.abcd@xyz.com12345空值
2空56789 546789
谁能帮我解决这个问题。对不起,如果这个问题以前重复过 使用条件聚合:
select
id
, max(case when type = 'email' then value end) as email
, max(case when type = 'phone' then value end) as phone
, max(case when type = 'workphone' then value end) as workphone
from t
group by id
或pivot()
(在sql server中):
rextester演示:
两者都返回:
+----+--------------+-------+-----------+
| id | email | phone | workphone |
+----+--------------+-------+-----------+
| 1 | abcd@xyz.com | 12345 | NULL |
| 2 | NULL | 56789 | 546789 |
+----+--------------+-------+-----------+
上述解决方案的替代方案是SQL Server中的Pivot命令。以下答案仅适用于SQL Server。此语法不适用于MYSQL。你已经用两个标签标记了这个问题,所以我不确定你在运行哪个。如果您使用的是MSSQL,以下链接将深入介绍该命令 . 以下代码将实现您想要的结果:
SELECT [ID] AS [ID],
[Email] AS Email,
[Phone] AS Phone,
[WorkPhone] AS WorkPhone
FROM
(
SELECT ID,
[TYPE],
[Value]
FROM dbo.Pivot_Ex
) AS FT
PIVOT
(
MAX([Value])
FOR FT.TYPE IN ([Email], [Phone], WorkPhone)
) AS PivotTable1
搜索
pivot
谢谢。将进行检查。标记mysql和mssql不起作用…请为您的数据库类型选择一个或另一个。交叉表或Pivot是您在这里尝试的内容基本上我在MySQL中也有相同的数据,所以我不介意为MySQL获取解决方案,顺便说一句,感谢@TwelfthGo和MSSQL,您可以访问诸如此处显示的“Pivot”之类的命令。在MySQL中,您所能做的最好的事情是伪造它……SqlZim的答案显示了这两种情况。
SELECT [ID] AS [ID],
[Email] AS Email,
[Phone] AS Phone,
[WorkPhone] AS WorkPhone
FROM
(
SELECT ID,
[TYPE],
[Value]
FROM dbo.Pivot_Ex
) AS FT
PIVOT
(
MAX([Value])
FOR FT.TYPE IN ([Email], [Phone], WorkPhone)
) AS PivotTable1