2012-01-12 58 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 2012-01-12 07:24:55