sql-server-2008 - 选择数据不为空或空白的列名

标签 sql-server-2008 names

SQL Server 2008

我有一个表MyTable,其中包含列A、B、C、D

当我选择一行时,我想要一个仅包含非空/空白列的列表。结果集将是

A
C
D

如果我的行中的 B 为空。

实际上,有一天可能会有一列E。但我可以从另一个表中获取所有可能的列名称,并且需要检查 MyTable 是否有其中任何一个,如果有,哪些列具有我选择的行的数据

因此:

select * from MyTable where ID = 6

select ColumnName from AllColumnNames
  • 对于结果中的每个ColumnName
    • 如果MyTable中存在ColumnName并且其中有数据其中ID = 6,则将ColumnName添加到输出。

必须有一种方法可以在一个查询中执行此操作吗?

最佳答案

这会将您的表转换为 CTE 中的 XML,然后使用 XQuery 查找不包含空值的节点名称。如果您的列名称不违反 XML 节点名称的规则,这将起作用。

;with C(TableXML) as
(
  select *
  from MyTable
  where ID = 6
  for xml path('T'), elements xsinil, type
)
select T.X.value('local-name(.)', 'sysname') as ColumnName
from C
  cross apply C.TableXML.nodes('/T/*') as T(X)
where T.X.value('.', 'nvarchar(max)') <> ''

在这里试试:https://data.stackexchange.com/stackoverflow/query/59187

如果您还想排除 ID 列,请将此添加到 where 子句。

T.X.value('local-name(.)', 'sysname') <> 'ID'

关于sql-server-2008 - 选择数据不为空或空白的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8846474/

相关文章:

SQL Server 2008 区分大小写的唯一列

c# - 有什么方法可以加速 Entity Framework 中的 CreateIfNotExists 吗?

r - 列表元素名称的问题

character-encoding - 人名的所有允许字符是什么?

sql-server - SSRS BIDS 表达式以根据 AD GROUPS 选择可见性

SQL 函数正确返回但在 Management Studio 中显示错误

sql-server-2008 - 在 SQL Server 2008 中使用子查询理解内部连接

python - 打印特定文件夹中所有文件夹和子文件夹名称的程序

ruby - 如何检测字符串何时具有通用业务后缀(例如 "Inc."、 "LLC' 、 "GmbH")

python - 导入语句中带有斜杠的任意 python 名称