我有一个表@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
我需要以上输出。
答案 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);
请注意,这两个解决方案都假设所涉及的所有列都具有相同的类型。