日期:2014-05-17  浏览次数:20516 次

MSSQL多列取最大或者最小值 --整理帖
/*

lvl1  lvl2    lvl3    lvl4    lvl 
4      3      4      1        
3      2      2      1    
2      2      3      4 
4      4      3      4 
3      1      2      2 
怎么写代码 去比较lvl1、lvl2、lvl3、lvl4 对应每行的值,取其中最小的,将其值添加到lvl列里 
运行结果应该是 
lvl 




1

*/

--方法(一) 函數法

-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-10-16 09:58:16

if not object_id('Tempdb..#t') is null
    drop table #t
Go
Create table #t([lvl1] int,[lvl2] int,[lvl3] int,[lvl4] int,[lvl] int)
Insert #t
select 4,3,4,1,null union all
select 3,2,2,1,null union all
select 2,2,3,4,null union all
select 4,4,3,4,null union all
select 3,1,2,2,null
Go
if object_id('UF_minget')is not null drop function UF_minget
go
create function UF_minget
(@col1 int,@col2 int,@col3 int,@col4 int)
returns int
as
  begin
     declare @t table(col int)
     insert @t select @col1 union all
               select @col2 union all
               select @col3 union all
               select @col4
     return(select min(col)from @t)
  end
go
update t set [lvl]=dbo.UF_minget([lvl1],[lvl2],[lvl3],[lvl4])
from #t t
select * from #t
/*
lvl1        lvl2        lvl3        lvl4        lvl
----------- ----------- ----------- ----------- -----------
4           3           4           1           1
3           2           2           1           1
2           2           3           4           2
4