add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table tables
(
table_name sysname
);

insert into tables values ('table_1'), ('table_2');

create table table_1
(
Amount money,
Amt money
);

insert into table_1 values
(100.34, null),
(null, 12.34),
(1234.56, 78.90);
5 rows affected
create table table_2
(
col1 money,
col2 money,
col3 money
);

insert into table_2 values
(100, 200, 300),
(400, 500, 600);
2 rows affected
create table #result
(
table_name sysname,
column_name sysname,
total_sum money
)

declare @sql nvarchar(max);

declare @table sysname;

select @table = min(table_name) from tables

while @table is not null
begin

select @sql = 'with cte as (' + char(13)
+ 'select' + char(13)
+ string_agg(char(9) + quotename(column_name) + ' = sum(' + quotename(column_name) + ')', ',' + char(13)) + char(13)
+ 'from ' + max(quotename(table_name)) + char(13)
+ ')' + char(13)
+ 'select a.table_name, a.column_name, a.total_sum ' + char(13)
+ 'from cte ' + char(13)
+ 'cross apply (' + char(13)
+ char(9) + 'values' + char(13)
+ string_agg(char(9) + '(''' + table_name + ''', ''' + column_name + ''',' + quotename(column_name) + ')', ',' + char(13)) + char(13)
+ ') a (table_name, column_name, total_sum)' + char(13)
from information_schema.columns
where table_name = @table
and data_type = 'money'

insert into #result
exec sp_executesql @sql

select @table = min(table_name) from tables where table_name > @table
end
table_name column_name total_sum
table_1 Amount 1334.9000
table_1 Amt 91.2400
table_2 col1 500.0000
table_2 col2 700.0000
table_2 col3 900.0000
Warning: Null value is eliminated by an aggregate or other SET operation.