从具有特定值的表中获取列名

Posted

技术标签:

【中文标题】从具有特定值的表中获取列名【英文标题】:To get column names from table having a particular value 【发布时间】:2011-04-12 07:29:38 【问题描述】:

请告诉我如何获取特定行的列值 =123 的列名。提前致谢。

【问题讨论】:

这是一件不寻常的事情,而且在纯 SQL 中也不是特别容易做到。也许如果你提供更多关于你的问题的细节,有人可以提出更好的方法。 如果您使用其他编程语言连接到 SQL,从 SQL 加载整行然后检查应用程序中的每一列可能更容易。 对于特定行,我将 requestID 作为唯一 ID,列名是关联的角色。我可以获取特定员工的所有角色,比如 id=1916,其中 1916 将是列值,角色将是列名。 你能改变数据库设计吗?听起来角色应该是数据而不是列名。如果没有,您使用的是哪种编程语言?还是在纯 SQL 中? 【参考方案1】:
-- Test table
declare @T table(ID int, Col1 varchar(10), Col2 int, Col3 bit, Col4 varchar(max))
insert into @T values (1, '123', 123, 1, 'Some text long text')

-- ID to get one row
declare @ID int
set @ID = 1

-- Value to search for
declare @Val varchar(10) 
set @Val = '123'

select 
  Col.value('local-name(.)', 'varchar(max)') as ColName
from (select *
      from @T
      where ID = @ID
      for xml path(''), type) as T(XMLCol)
  cross apply 
    T.XMLCol.nodes('*') as n(Col) 
where Col.value('.', 'varchar(10)') = @Val  

结果

ColName
--------
Col1
Col2

【讨论】:

以上是关于从具有特定值的表中获取列名的主要内容,如果未能解决你的问题,请参考以下文章

如何获取表中具有空值的行,并且没有任何关于任何列名的行?

在两个表中获取特定值的最佳方法[重复]

从PHP中具有相同列值的表中获取2行

消息:未定义的索引:获取列名时(两个具有相同列的表)Codeigniter

从每个 id 具有特定值的表中选择行

如何从具有多个页面的表中获取表记录?