通过特定行值动态获取列名
Posted
技术标签:
【中文标题】通过特定行值动态获取列名【英文标题】:Get column name dynamically by Specific row value 【发布时间】:2013-05-18 07:14:48 【问题描述】:我对编写查询感到震惊。 这里我想根据一些特定的值来显示列名
例如,我的桌子是这样的:
id | fruits |vegetables |softdrink
-----------------------
1 | apple | Onion | Pepsi
2 | mango | Potato | Coke
3 | banana | Bringal | RedBull
如果我有一个值“芒果”,那么我应该将列名设为水果或
如果我有一个值“RedBull”,那么我应该将列名设为 softdrink
注意:我有很多大约 48 列可以从其中任何一个中获取名称
【问题讨论】:
动态 sql,我猜。 @JW웃,我该如何写动态sql 怎么样:***.com/questions/8676354/… @Luceos 我在一张桌子上 如果e
和g
都在record
中,那么应该返回什么??@zan
【参考方案1】:
set @q= CONCAT('SELECT columns.column_name
from table inner
join information_schema.columns
on columns.table_schema = "dbname"
and columns.table_name = "table"
and ((',
(SELECT GROUP_CONCAT(CONCAT('columns.column_name="',column_name,'"',' and table.',column_name,' = "value','"') SEPARATOR ' OR ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table'),
'))');
prepare query from @q;
execute query;
这确实有效..
呼!
小提琴:http://sqlfiddle.com/#!2/9420c/2/2
PS:table
替换为您的表名,dbname
替换为您的数据库名称,value
替换为您的值
【讨论】:
在第一个语句中??替换值后检查语句【参考方案2】:由于您尽可能加密了您的问题,我只能猜测。
这张桌子设计不好。它应该是这样的
col | value
col1 | a
col1 | b
col2 | d
等等。
比你可以轻松地从价值中获取你的 col
【讨论】:
没错,这就是桌子的设计……他的问题。 我真的需要改变我的表格设计吗,现在我的表格很简单,我只需要获取列名就可以了以上是关于通过特定行值动态获取列名的主要内容,如果未能解决你的问题,请参考以下文章