2017-03-24 6 views
0

私は以下のテーブル構造とエントリを持つテーブルを持っています。 特定のユーザーに対応する行の値がNULLである特定の行の列の名前を取得するクエリを作成したいとします。 名前= mayurのように出力を "Company Gender Citizen"としたいが、その値はNULLなので、他の人は入力しない。SQLクエリを書くことができません

注: 1.OMIT「名前、IDパスワード、電子メール」の列。 2.管理者が列を追加または削除する権限を持つため、すべての列名が変更されることがあります。 enter image description here

SQLクエリの作成を手伝ってください。

+0

_names_列を取得すると奇妙な要求が発生します。あなたはそれを望んでいるのですか?_values_をその列の中に入れたいですか? –

+0

Name、IS、Password、Email、Company、Gender、Citizen以外のヌルでない特定のユーザーの列名を取得したいとします。 –

+0

あなたはこれから助けを受けるかもしれません................ SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'schema_name' AND table_name = 'table_name'; –

答えて

0

はこれを試してみてください:

SELECT 
    CASE WHEN Company IS NULL THEN 'Company, ' ELSE '' END 
+ CASE WHEN Gender IS NULL THEN 'Gender, ' ELSE '' END 
+ CASE WHEN Citizen IS NULL THEN 'Citizen, ' ELSE '' END 
-- + ... -- add CASE statement for all other relevant columns 
FROM Table_Name 
WHERE Name = 'mayur' 

あなたが最後にカンマが作成したクリアする必要があるでしょうが、私はそれは大したことではないと思います。

+0

管理者は列を追加または削除する権利があるため、すべての列名が変更されることがあります。私は列の名前をハードコードすることはできません。 –

0

これは、同じクエリを生成します

SELECT GROUP_CONCAT(CONCAT('CASE WHEN `',`COLUMN_NAME`,'` is null THEN ''',COLUMN_NAME,''' ELSE '''' END ')) into @casestmt 
FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME`='users'; 
set @query="select @casestmt from users WHERE name='mayur'"; 
PREPARE stmt1 from @query; 
EXECUTE stmt1; 

SQL Serverバージョン

DECLARE @query as varchar(max); 
SET @query='select '+stuff((select '+'+'CASE WHEN ['+COLUMN_NAME+'] is null THEN '''+COLUMN_NAME+ ''' ELSE '''' END' from information_schema.columns where table_name = 'users' AND COLUMN_NAME not in ('Name', 'ID', 'Password', 'Email') for xml path('')),1,1,'')+' from users WHERE [name]=''mayur'' '; 
execute(@query) 

MySQLバージョン@Giorgos Altanisが提案した唯一の違いはある、前の応答でほんの少しの修正を、これを試してみてくださいその列名は自動的にテーブル用に取得されます。 Procを作成したくない場合は、すべての文を一度に実行することができます。これにより、希望の出力が得られます。

+0

正確なクエリを書式で入力して、説明と一緒に確認することができますか? –

+0

また、ストアドプロシージャのように思えます。直接クエリまたは複数のクエリは、それを実装するのに役立ちます。 –

+0

あなたの要件に従ってクエリを更新しました。このため私は動的クエリを作成しています。スタッフ部分は、@ Giorgos Altanisが提案したCase文を作成するために使用されます。あなたの望む結果を得るためにあなたのテーブルと組み合わされます。 –

関連する問題