0

我正在尝试根据我给出的名称获取不为空的列名称。

我的数据库看起来像这样

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 列名而不是值。

在这里,我尝试了我的查询。

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'; 

那么任何人都可以帮助我如何解决这个问题

4

1 回答 1

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 语句必须具有明确定义的列。因此,您不能将每个列名放在单独的列中——那么您需要在结果集中有可变数量的列(不允许)。

于 2013-09-17T11:11:11.543 回答