我有一个包含下表结构和条目的表。 我想编写一个查询,它会给我一个特定行的列名,这个行的值对应于一个特定的用户。 Like name = mayur我想输出为 “公司性别公民”,但不是其他人,因为它们的值为NULL。无法写入SQL查询
注意: 1.OMIT“名称,ID密码,电子邮件”列。 2.由于管理员有权添加或删除列,所有列名称可能会更改。
请帮我写SQL查询。
我有一个包含下表结构和条目的表。 我想编写一个查询,它会给我一个特定行的列名,这个行的值对应于一个特定的用户。 Like name = mayur我想输出为 “公司性别公民”,但不是其他人,因为它们的值为NULL。无法写入SQL查询
注意: 1.OMIT“名称,ID密码,电子邮件”列。 2.由于管理员有权添加或删除列,所有列名称可能会更改。
请帮我写SQL查询。
试试这个:
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'
您将需要清除最后一个逗号创建的,但我认为这也没什么大不了的。
所有列名称可能会更改,因为管理员有权添加或删除列。我无法硬编码列的名称。 –
试试这个,在以前的响应只需稍加修改
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,那么你可以立即执行所有的语句,它会给你想要的输出
你能帮我准确的查询格式,以便我可以查看解释。 –
而且它看起来像一个存储过程。直接查询或多个查询将帮助我实现它。 –
我已根据您的要求更新了查询。为此,我创建了动态查询。材料部分用于创建@Giorgos Altanis在回复中提出的Case语句。然后将它与您的餐桌结合在一起,为您提供所需的结果。 –
获得回列_names_作为一个奇怪的请求罢工我。你确定要这么做吗?还是你想在这些列中使用_values_? –
我想获取除名称,IS,密码,电子邮件,公司,性别和公民以外的特定用户的列名称。 –
你可以从这里获得帮助................ SELECT * FROM information_schema.COLUMNS WHERE table_schema ='schema_name'AND table_name ='table_name'; –