3

私はテーブルXを持っています

ID      A       B       C        D
1       T       T       F        T
2       F       T       F        T
3       T       F       T        F

したがって、ID の入力が 1 の場合、行 1 に値 T を持つすべての列名が必要です。上記の場合、A、B、D または ID が 3 の場合は A と C.

これらの列を一覧表示するにはどうすればよいですか?

4

3 に答える 3

1

また、強力な FLWOR 式で XQuery を使用することもできます。そして、テーブルが含まれる列の数に関係なく;)

SELECT(
       SELECT *     
       FROM Table1 t
       WHERE ID = 1 
       FOR XML PATH(''), TYPE
       ).query(
               'for $spec in ./*
                where $spec [contains(., "T")]           
                return fn:local-name($spec)'
                ) o

SQLFiddle のデモ

この決定は、各行の列の名前を返します

SELECT o.TCols.value('.', 'nvarchar(100)') AS T 
FROM(SELECT(
            SELECT *     
            FROM Table1 t
            WHERE ID = 1
            FOR XML PATH(''), TYPE
            ).query('
                     for $spec in ./*
                     where $spec [contains(., "T")]           
                     return (
                             <TCols>
                               {fn:local-name($spec)}
                             </TCols>
                             )
                     ')) t(TCols) CROSS APPLY T.TCols.nodes('/TCols') o(TCols)

結果

+---+
| T |
+---+
| A |
| B |
| D |
+---+

SQLFiddle のデモ

于 2013-06-04T11:20:31.730 に答える
0

すべての列の数と名前がわかっている場合は、以下を実行できます

SELECT case A when 'T' then 'A' else '' end
  + case B when 'T' then ',B' else '' end
+ case C when 'T' then ',C' else '' end
+ case D when 'T' then ',D' else '' end
FROM
 Table1
WHERE ID = 1
于 2013-06-04T10:08:41.187 に答える