2017-02-21 6 views
0

Ich habe eine Tabelle mit vielen Spalten (dynamisch generierte Spalten) und eine Zeile mit USER_KEY (die den Typ INT hat).Zusammenfassung der dynamisch hinzugefügten Spalten für jede Zeile

Art der dynamisch hinzugefügten Spalten ist DECIMAL(15,2).

Meine Tabelle sieht wie folgt aus:

enter image description here

Was Ich mag würde, ist Zusammenfassung für alle Spalten für jeden Benutzer erhalten tun, in dieser Reihe. Da es so viele von ihnen dynamisch generiert, kann ich nicht hart schreiben. Wie macht man das?

ich auch variable @COLDEPARTMENTS haben, wo alle diese dynamischen Spalten durch Komma getrennt sind, wie folgt aus:

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

Antwort

1
verwenden

Sie können das folgende Skript verwenden, um alle automatisch generierten Spalten als einzelne Zeile mit Komma getrennt zu erhalten.

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 

Sie können das Ergebnis auch in Variable speichern und diese mit Ihrer ursprünglichen Tabelle verwenden.

1

Wenn Sie versuchen zu identifizieren, welche Spalten Werte haben und Sie die Spaltennamen nicht eingeben möchten. Dann sollte das Folgende tun, was Sie wollen.

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