2017-04-24 52 views
0

该查询返回我从一个表中的最大整数值的最大整数值:列具有表的SQL Server

SELECT rownum, max(col) as maxValue -- min 10717 , max = 311216 
FROM 
    (
    SELECT rownum, col FROM Tables1 
    UNPIVOT 
    (col FOR ListofColumns IN 

    (col1,col2,col3,col4,col5, col6)) 
    AS unpivott) AS p 
GROUP BY rownum 

而是 “COL1,COL2,COL3,COL4,COL5,COL6” 的。我想使这种动态(从数据类型为int/numeric的表中自动获取)。

注:有时列数可能为50,我不想写每个列名。

我该怎么做?

+0

你可以在这里添加表格的结构吗? –

+0

表结构可以是任何东西:我可以像这样gety:FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE IN('数字') – AskMe

+0

来实现我的脚本到你的例子中我们需要表结构和一些示例数据。 – KumarHarsh

回答

0

动态sql是唯一的方法。 你这样开始,

create table t1(rolname varchar(20),col1 int,col2 int,col3 int,col4 int) 
insert into t1 values('a',32,45,23,645) 
,('b',67,34,2673,344),('c',423,767,54,343),('d',676,43435,3432,4343) 


declare @col varchar(2000) 
select top 1 
@col=stuff((select ','+'['+COLUMN_NAME+']' from INFORMATION_SCHEMA.COLUMNS b 
where TABLE_NAME=a.TABLE_NAME and DATA_TYPE='int' for XML path('')),1,1,'') 
from INFORMATION_SCHEMA.COLUMNS a 
where TABLE_NAME='t1' 

select @col 

declare @sql varchar(max) 
set @sql='sELECT rolname, max(col)col 
FROM 
    (
    SELECT * FROM t1 
    UNPIVOT 
    (col FOR ListofColumns IN 

    ('[email protected]+')) 
    AS unpivott) AS p 
    GROUP BY rolname' 

    exec (@sql) 
+0

这只会给出列名但不是列的最小值或最大值 – AskMe

+0

不,你没有得到它。你可以从我的脚本开始,然后进一步使用你的脚本并使其成为动态sql。 – KumarHarsh

+0

@TryingBest,检查我的script.it在我的本地工作正常 – KumarHarsh