2017-02-21 63 views
0

我有许多列(动态生成的列)的表,并用一个USER_KEY行(其类型INT)。动态添加的列的摘要动态添加列的每行

类型是DECIMAL(15,2)

我的表看起来像这样:

enter image description here

我想这样做的就是总结为每个用户该行中的所有列。由于动态生成的动态数量非常多,因此我无法很好地输入。这个怎么做?

我也有可变@COLDEPARTMENTS,所有这些动态列由逗号分隔,就像这样:

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

回答

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}'