2

SQL Server 2008

MyTable列のあるテーブルがありますA, B, C, D

行を選択すると、null 以外/空白の列のみのリストが必要です。結果セットは次のようになります

A
C
D

B私の行でnullだった場合。

E実はいつかコラムがあるかもしれません。しかし、別のテーブルからすべての可能な列名を取得できMyTable、それらのいずれかがあるかどうか、ある場合は選択した行のデータがあるかどうかを確認する必要があります

したがって:

select * from MyTable where ID = 6

select ColumnName from AllColumnNames
  • ColumnName結果の それぞれについて
    • ColumnNameに存在し、MyTableその中にデータがある場合は、出力where ID = 6に追加ColumnNameします。

1 つのクエリでこれを行う方法が必要ですか?

4

1 に答える 1

3

これにより、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'
于 2012-01-13T06:19:34.333 に答える