-1

我们有一个数据库,它有几个模式,每个模式都有一个事实表。我需要准备一个结果集,其中包含模式名称、来自 Fact 的 max(MTH_DT) 和来自每个 Fact 表的不同 MTH_DT 计数。

SCHEMA_NAME  MAX(MTH_DT)    DISTINCT_COUNT(MTH_DT)
SCHM_1       11/30/2015     24
SCHM_2       10/31/2015     24
SCHM_3       11/30/2015     36
SCHM_4       10/31/2015     24
SCHM_5       11/30/2015     24

我怎样才能以这种方式获得结果集?

4

2 回答 2

0

来了

当您确定查询并运行查询时,只需取消注释 EXECUTE 语句:

DECLARE @SQL VARCHAR(MAX) = ''

SELECT @SQL += 'SELECT '''+T.TABLE_NAME+''' AS [SCHEMA_NAME],MAX(MTH_DT) AS [MAX(MTH_DT)] ,COUNT(MTH_DT)  AS [DISTINCT_COUNT(MTH_DT)] FROM '+T.TABLE_SCHEMA+'.'+T.TABLE_NAME + ' UNION ' FROM INFORMATION_SCHEMA.TABLES AS T WHERE T.TABLE_NAME  like 'SCHM_%'
SELECT  @SQL = SUBSTRING(@SQL,1,LEN(@SQL) - LEN('UNION'))

PRINT (@SQL)
--EXECUTE (@SQL)
于 2016-01-20T18:13:06.243 回答
0

这是构建动态 sql 比使用 INFORMATION_SCHEMA.TABLES 更安全的方法。我离开了 group by,因为它是一个常数,所以你实际上不需要 group by。

declare @SQL nvarchar(MAX) = ''

select @SQL = @SQL + 'select ''' + name + ''' as SchemaName, MAX(MTH_DT) as MaxMTH_DT, COUNT(distinct MTH_DT) as DISTINCT_COUNT_MTH_DT from ' + name + '.Fact union all ' 
from sys.schemas
where SCHEMA_ID > 4
    and SCHEMA_ID < 16384

Select @SQL = LEFT(@SQL, LEN(@SQL) - 9) + ' order by SchemaName'

select @SQL
于 2016-01-20T18:30:36.877 回答