无法编写SQL查询

时间:2017-03-24 05:29:13

标签: php mysql sql

我有一个包含以下表结构和条目的表。 我想编写一个查询,它将为我提供特定行的列的名称,该行的行值为null,对应于特定用户。 就像name = mayur一样,我希望输出为 “公司性别公民”,但不是其他人,因为他们的价值是空的。

注意: 1.OMIT“名称,ID密码,电子邮件”列。 2.所有列名称可能会更改,因为管理员有权添加或删除列。 enter image description here

请帮我写一下SQL查询。

2 个答案:

答案 0 :(得分: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'

您需要清除最后创建的逗号,但我认为这没什么大不了的。

答案 1 :(得分:0)

试试这个,在之前的回复中做一点修改

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版

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;

这将生成@Giorgos Altanis建议的相同查询,唯一的区别是列名将自动为表定义。 如果您不想创建Proc,那么您可以立即执行所有语句,这将为您提供所需的输出