在不知道列名的情况下选择表上的统计操作

时间:2017-07-17 12:03:41

标签: sql sql-server

我正在分析许多表格的数据质量,包括最小值,最大值,平均值,标准差等量化指标。

如何在不知道表格列名的情况下在所有表格列上选择不同的统计操作(最小值,最大值,标准偏差...)?

类似于:

  

选择min(col1),max(col1),stdev(col1),min(col2)...,min(colN)   来自table1

但是对列名进行动态引用,因为我必须在具有不同列名的众多表上运行它,并且我不想每次都更改代码。

我正在使用SQL Management Studio。

非常感谢你。

1 个答案:

答案 0 :(得分:0)

嗯,这是一个相当合理的方法来做这样的事情:
注意您需要将其余的数值数据类型添加到此示例中。

DECLARE @SQL nvarchar(max) = '';

SELECT @SQL = @SQL + 
'
UNION ALL
SELECT '''+ TABLE_NAME +''' As TableName, 
       '''+ COLUMN_NAME +''' As ColumnName, 
       MIN('+ COLUMN_NAME +') As [Min], 
       MAX('+ COLUMN_NAME +') As [Max], 
       STDEV('+ COLUMN_NAME +') As [STDEV]
FROM '+ TABLE_NAME
FROM information_schema.columns
WHERE DATA_TYPE IN('tinyint', 'smallint', 'int', 'bigint') -- Add other numeric data types 

SELECT @SQL = STUFF(@SQL, 1, 11, '') -- Remove the first `UNION ALL` from the query

EXEC(@SQL)

此查询的结果将如下所示:

TableName   ColumnName  Min     Max     STDEV
Table1      Col1        -123    543     100
Table1      Col2        54      72      5
Table1      Col3        0       1000    100