2017-04-24 56 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