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