0

指定した名前に基づいて、null ではない列名を取得しようとしています。

私のDBは次のようになります

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 の出力が得られ (null 列は表示されません)、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 に答える