2012-01-12 9 views
1

私はSQL Server 2000のプログラミングに関する問題を抱えています。私はT-SQLの初心者です(私は主にMySQLを使用しています)ので、誰かがこれを見て簡単にやり遂げることができるかもしれません。困難なT-SQLプログラミングタスク

私は、0または1のいずれかを含む多数の列を持つテーブルを持っています。たとえば、var1, var2, var5, var9というラベルの列があります。最大約120列までが可能である。これらの列の接尾辞は連続している必要はないことに注意してください。

:これらの列のそれぞれは、私が行うために必要なもの0または1の新しい列を作成する。例えば1

が含まれているすべての列のリテラル列名は、私のデータは次のようになり含ま含ま

ID var1 var2 var5 var7 var9 
-------------------------------------- 
1 0  1  0  0  1 
2 0  1  1  1  0 

私は上の値

ID NewCol 
--------------------- 
1 var2,var9 
2 var2,var5,var7 

とを含む新しい列が必要です。

VB、Perlなどのクライアントサイドコードは使用できません。ストアドプロシージャでこれを行う必要があります。名前または番号のいずれかで変更される可能性のある列の数が多いため、ハードコードされた一連のSELECT CASE文以外のものが必要です。

私のT-SQL知識には本当に制限があります。これはできますか?

TIA

答えて

4

あなたはこのようなクエリでこれを行うことができます:ここで

select ID, 
     stuff(
     case var1 when 1 then ',var1' else '' end + 
     case var2 when 1 then ',var2' else '' end + 
     case var5 when 1 then ',var5' else '' end + 
     case var7 when 1 then ',var7' else '' end + 
     case var9 when 1 then ',var9' else '' end 
     , 1, 1, '') 
from YourTable 

はそれを動的に構築する方法です。

declare @SQL varchar(8000) 
set @SQL = '' 

select @SQL = @SQL + ' + case '+COLUMN_NAME+' when 1 then '','+COLUMN_NAME+''' else '''' end' 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'YourTable' and 
     COLUMN_NAME <> 'ID' 

set @SQL = 'select ID, stuff('+stuff(@SQL, 1, 3, '')+', 1, 1, '''') from YourTable' 

exec(@SQL) 
+0

ブリリアント!このソリューションは、私が望むものとまったく同じです。先生、私はあなたの借金に入っています。ありがとうございました! – craigm