SQL列级最值纵向展示需求:基于@tbl表实现行列转换查询
没问题,我来帮你搞定这个纵向展示列最值的需求!
实现纵向展示列的最值(格式1)
针对你给出的测试表和数据,我们可以通过两种方式实现纵向输出每一列的列名、最小值和最大值:
方法1:用UNION ALL拆分列统计(直观易读)
这种方式适合列数不多的场景,直接为每一列单独统计最值,再合并结果行:
declare @tbl table(ind1 float, ind2 float,ind3 float ) insert into @tbl values (10,14,19 ),(11,22,13 ),(12,13,15 ) -- 格式1:纵向展示列名、最小值、最大值 SELECT 'ind1' as col_name, MIN(ind1) as min_value, MAX(ind1) as max_value FROM @tbl UNION ALL SELECT 'ind2' as col_name, MIN(ind2) as min_value, MAX(ind2) as max_value FROM @tbl UNION ALL SELECT 'ind3' as col_name, MIN(ind3) as min_value, MAX(ind3) as max_value FROM @tbl
执行后会得到你预期的结果:
| col_name | min_value | max_value |
|---|---|---|
| ind1 | 10 | 12 |
| ind2 | 13 | 22 |
| ind3 | 13 | 19 |
方法2:用UNPIVOT转置后聚合(适合多列场景)
如果后续表的列数增加,重复写UNION ALL会很繁琐,这种方法先把横向列转成纵向键值对,再分组统计:
declare @tbl table(ind1 float, ind2 float,ind3 float ) insert into @tbl values (10,14,19 ),(11,22,13 ),(12,13,15 ) SELECT col_name, MIN(value) as min_value, MAX(value) as max_value FROM ( SELECT ind1, ind2, ind3 FROM @tbl ) t UNPIVOT ( value FOR col_name IN (ind1, ind2, ind3) ) up GROUP BY col_name
最终输出结果和方法1完全一致,且后续新增列时只需要修改UNPIVOT中的列名列表即可。
内容的提问来源于stack exchange,提问作者hieko
相关产品推荐
相关产品推荐

