2017-02-21 56 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}'