2017-02-14 18 views
2

ここにサンプルテーブルがあります - 値が1のみのすべての列を取得したいとします。出来ますか?SQL Server:条件を使用してテーブルの列名を取得

enter image description here

+0

どれも実際にこの条件を満たすように表示されませんが、いずれにしても値を各列をチェックしていますこの要件に基づいて結果セットに表示される列を選択するには、動的SQLが必要になると思います。 –

答えて

1

その絶対的に可能ですが、プロセスは長いですが、私はsys.columnsから列名を取得することにより、各列の データexistsをチェックするloopを使用しています。それは任意の用語であなたを助けている場合、これを試してください:

ここで私はあなたのサンプル・データの列の1だけ

CREATE TABLE testing(val1 INT, val2 INT, val3 INT) 
INSERT INTO testing VALUES 
(1, 0, 1),(1, 0, 1),(1, 1, 1) 

Table: testing 
val1 val2 val3 
1  0  1 
1  0  1 
1  1  1 

DECLARE @sql NVARCHAR(500), @list VARCHAR(500) 
DECLARE @num INT=1, @col_name VARCHAR(100) = NULL, @cnt INT 

WHILE(@num<=3) 
BEGIN 
SELECT @col_name = name FROM sys.columns 
      WHERE object_id = OBJECT_ID('testing') and column_id = @num 
SET @cnt = 0 
SET @sql = ' 
IF NOT EXISTS(SELECT 1 FROM testing WHERE ' + @col_name + ' = 0) SET @cnt = 1' 

EXEC sp_executesql @sql, N'@cnt INT OUT', @cnt OUT 

IF @cnt = 1 
    SET @list = COALESCE(@list + ',', '') + @col_name 

SET @num = @num+1 
END 

SET @sql = ' 
SELECT ' + @list + ' FROM testing' 
EXEC(@sql) 

OUTPUT: 

val1 val3 
1  1 
1  1 
1  1 
関連する問題