2012-01-13 13 views
2

SQL Server 2008の選択カラム名

私は列を持つテーブルMyTableを持ってA, B, C, D

私は私がしたい行の非NULLで列のみのリストを選択/空白。結果セットは

A 
C 
D 

Bがヌルの場合)です。

実際には、いつかEという列がある可能性があります。しかし、私は別のtabieから可能なすべてのカラム名を取得し、MyTabieは、それらのいずれかを持っているので、どれが行のデータを持っている場合、私は

このように、選択しているかどうかを確認する必要がありますすることができますそれぞれについて、

select * from MyTable where ID = 6 

select ColumnName from AllColumnNames 
  • ColumnNameMyTableに存在し、それwhere ID = 6にデータがある場合は、結果でColumnName
    • 、出力にColumnNameを追加します。

奨めは1つのクエリでこれを行う方法もありますか?

+2

これを簡単に行うことができる唯一の方法は、動的SQL –

答えて

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)') <> '' 

ここで試してみてください。

http://data.stackexchange.com/stackoverflow/query/59187追加このあなたが同様にID列を除外したい場合は句インクルード。

関連する問題