mysql sql设置值_mysql – 在SQL查询结果中将列值设置为列名

我想读一个表,其中的值将是sql查询结果的列名.

例如,我有table1作为..

id col1 col2

----------------------

0 name ax

0 name2 bx

0 name3 cx

1 name dx

1 name2 ex

1 name2 fx

如果您看到id = 0,则name的值为ax,名称为2 – bx,name3 = cx

而不是这是行,更容易将列显示为id,name,name2,name3

现在我希望查询的结果看起来像这样

id name name2 name3

0 ax bx cx

1 dx ex fx

有人可以帮我实现这个目标吗?

解决方法:

这是通过数据透视表完成的.按id分组,为要在列中捕获的每个值发出CASE语句,并使用类似MAX()聚合的方法来消除空值并向下折叠到一行.

SELECT

id,

/* if col1 matches the name string of this CASE, return col2, otherwise return NULL */

/* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */

MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,

MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,

MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3

FROM

yourtable

GROUP BY id

ORDER BY id

注意:这仅适用于col1的有限且已知数量的可能值.如果可能值的数量未知,则需要在循环中动态构建SQL语句.

标签:sql,mysql,pivot

来源: https://codeday.me/bug/20190918/1810987.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值