我正在尝试根据我给出的名称获取非空的coloumns名称。
我的数据库看起来像这样
name user p1 p2 p3 p4
test ravi 21 22
test jan 56 75
ravi test 56 75
ravi test 75 34
因此,当我选择名称作为ravi时,它应该给我颜色名称p1,p2的输出(不应该显示空颜色),如果我给ravi它应该显示p1,p2 coloumns名称而不是值。
这里我尝试了我的查询。
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='test'
AND `TABLE_NAME`='details'
AND column_name LIKE 'Q%'
AND is_nullable = 'NO'
AND 'user'='test';
所以任何人都可以帮我解决这个问题
答案 0 :(得分:0)
如果我理解正确,您需要非NULL列名列表。您可以使用concat()
:
select `user`,
ws_concat(',',
(case when p1 is not null then 'p1' else '' end),
(case when p2 is not null then 'p2' else '' end),
(case when p3 is not null then 'p3' else '' end),
(case when p4 is not null then 'p4' else '' end)
) as NonNullColumns
from t
where `user` = 'ravi';
SQL语句必须具有明确定义的列。因此,您不能将每个列名称放在单独的列中 - 那么您需要在结果集中使用可变数量的列( not 允许)。