2017-02-21 11 views
0

多くの列(動的に生成される列)とUSER_KEY(これはタイプがINT)の行があります。動的に追加された各行の列の概要

動的追加列のタイプはDECIMAL(15,2)です。

私のテーブルには、次のようになります。私がやりたい何

enter image description here

は、その行のすべての列のため、ユーザーごとに概要を取得することです。非常に多くが動的に生成されているので、これを厳重に入力することはできません。これを行う方法?私もこのようなすべてのものを動的な列をカンマで区切られ、変数@COLDEPARTMENTS、持って

[120000003],[120000002],[140000001],[120000005],[120000021],[120000025] 

答えて

1
参照してください一時テーブルを使用していると仮定します

以下のスクリプトを使用すると、自動生成されたすべての列をコンマで区切った1行として取得できます。

Declare @tmp varchar(250) 
SET @tmp = '' 
select @tmp = @tmp + Column_Name + ', ' from [AdventureWorksDW2014].INFORMATION_SCHEMA.COLUMNS 
where table_name like '%FactInternetSales%' 

select SUBSTRING(@tmp, 0, LEN(@tmp)) as Columns 

ます。また、結果を変数に保存し、元の表とそれを使用することができます。

1

値を持つ列を識別しようとしていて、列名を入力しない場合は、次に、あなたが望むことを次のようにする必要があります。

SELECT 'SELECT user_key, '+ 
     + cols.ColumnList + CHAR(10) + 
     + ' FROM ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) + CHAR(10) 
FROM sys.tables t 
     CROSS APPLY (SELECT DISTINCT STUFF(
        (SELECT CHAR(10) + CHAR(9) + ', ' 
          + QUOTENAME(c.name) + ' = CASE WHEN ' + QUOTENAME(c.name) + ' IS NULL THEN 1 ELSE 0 END' 
         FROM sys.columns c 
         WHERE c.object_id = t.object_id 
         AND c.name != 'user_id' 
         FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,3,'') AS ColumnList 
      )cols 
WHERE t.name = '{TABLE NAME}' 
関連する問題