выбор имен столбцов, где данные не являются нулевыми или пустыми - PullRequest
2 голосов
/ 13 января 2012

SQL Server 2008

У меня есть таблица MyTable со столбцами A, B, C, D

Когда я выбираю строку, мне нужен список только тех столбцов с ненулевыми / пробелами. Набор результатов будет

A
C
D

если B был нулевым в моем ряду.

На самом деле, когда-нибудь может появиться столбец E. Но я могу получить все возможные имена столбцов из другой вкладки, и мне нужно проверить, есть ли у MyTabie какие-либо из них, и если да, то какие из них имеют данные для выбранной строки

Таким образом:

select * from MyTable where ID = 6

select ColumnName from AllColumnNames
  • Для каждого ColumnName в результате
    • если ColumnName существует в MyTable И в нем есть данные where ID = 6, добавьте ColumnName к выводу.

Должен ли быть способ сделать это одним запросом?

1 Ответ

3 голосов
/ 13 января 2012

Это преобразует вашу таблицу в XML в CTE, а затем использует 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)') <> ''

Попробуйте здесь: http://data.stackexchange.com/stackoverflow/query/59187

Добавьте это предложение where, если вы также хотите исключить столбец ID.

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