最小值和最大值显示列明智

时间:2018-04-13 11:58:13

标签: sql sql-server tsql

我有一个表@tbl有3列ind1,ind2和ind3。我想从每列中获取最大值和最小值 以下列方式呈现。

declare @tbl table(ind1 float, ind2 float,ind3 float   )

insert into @tbl 
values (10,14,19 ),(11,22,13 ),(12,13,15 )

我的尝试:

 SELECT MIN(IND1) IND1_MIN 
     ,MAX(IND1) IND1_MAX 
     ,MIN(IND2) IND2_MIN 
     ,MAX(IND2) IND2_MAX 
     ,MIN(IND3) IND3_MIN 
     ,MAX(IND3) IND3_MAX 
FROM @TBL 

输出要求1:     col_name min_value max_value     ind1 10 12     ind2 13 22     ind3 13 19

输出要求2:

  value  ind1 ind2  ind3 
  min     10   13    13
  max     12   22    19

我需要以上输出。

1 个答案:

答案 0 :(得分:2)

这是对问题的原始版本的回答。

基本上,您需要取消数据的转移。对于少量数据,只需使用union all

select 'ind1' as col_name, min(ind1), max(ind1) from @tbl union all
select 'ind2' as col_name, min(ind2), max(ind2) from @tbl union all
select 'ind3' as col_name, min(ind3), max(ind3) from @tbl ;

更通用的解决方案是使用apply(或unpivot,如果您愿意的话):

select col_name, min(val), max(val)
from @tbl t cross apply
     (values ('ind1', ind1), ('ind2', ind2), ('ind3', ind3)
     ) v(col_name, val);

请注意,这两个解决方案都假设所涉及的所有列都具有相同的类型。