Mysql 如何将表行值设置为列
我想根据Mysql表中的行值生成列名Mysql 如何将表行值设置为列,mysql,sql,database,Mysql,Sql,Database,我想根据Mysql表中的行值生成列名 Id Value Type 1 ABC Bank Bank 1 User Name 1 123 ID 1 user@email.com Email 1 Banking Reference 我想上面是显示如下,你能帮我写这个查询。提前谢谢 Id Bank Name I
Id Value Type
1 ABC Bank Bank
1 User Name
1 123 ID
1 user@email.com Email
1 Banking Reference
我想上面是显示如下,你能帮我写这个查询。提前谢谢
Id Bank Name ID Email Reference
1 ABC Bank User 123 User@email.com Banking
您可以使用条件聚合:
select id,
max(case when type = 'Bank' then value end) as bank,
max(case when type = 'Name' then value end) as name,
max(case when type = 'Id' then value end) as otherId,
max(case when type = 'Email' then value end) as email,
max(case when type = 'reference' then value end) as reference
from t
group by id;
我们可以通过PIVOT概念实现动态使用,但无论[Type]字段数据是否应该是实际字段名,都应该是不同的
CREATE TABLE PivotTable (Id INT,Value VARCHAR(100),[Type] VARCHAR(100))
INSERT INTO PivotTable VALUES
(1,'ABC Bank','Bank')
,(1,'User','Name')
,(1,'123','IDs')
,(1,'user@email.com','Email')
,(1,'Banking','Reference')
SELECT * FROM PivotTable
DECLARE @Columns NVARCHAR(MAX),
@SQL NVARCHAR(MAX)
SET @Columns = STUFF((SELECT DISTINCT ','+[Type] FROM PivotTable FOR XML PATH('')),1,1,'')
SET @SQL = 'SELECT Id,'+@Columns+' FROM
(
SELECT Id,
Value,
[Type]
FROM PivotTable
) P
PIVOT
(
MAX(Value) FOR [Type] IN ('+@Columns+')
)pvt'
EXEC (@SQL)
您应该研究在mysql中创建数据透视。以下是指向示例pivot的链接:。是每个id的变量值数量,是否不知道可以有多少个变量以及它们的顺序如何?值的数量可能会有所不同。它可以是5到10之间的任何值