如何解决表格的最大值
我正在寻找一个sql Server查询,该查询返回仅包含int
(或floats
)的表的最大值:
create table tab
(
temp1 int,temp2 int,temp3 int,temp4 int
)
insert into tab
values (1,2,3,4),(5,6,7,8),(9,10,11,12)
我想退回12
。
有可能以简单的方式吗?
解决方法
在SQL Server中,最简单的方法可能是先使用侧向联接取消透视,然后再进行top()
:
select top (1) val
from tab
cross apply (values (temp1),(temp2),(temp3),(temp4)) x(val)
order by val desc
或者使用聚合而不是排序:
select max(val) val
from tab
cross apply (values (temp1),(temp4)) x(val)
,
--fixed number of cols: temp1-4
select max(unp.theint)
from tab as t
unpivot
(
theint FOR thecol IN ( temp1,temp2,temp3,temp4)
) as unp;
--any number of cols
alter table tab add col1 int default(10) with values;
alter table tab add colx int default(100) with values;
select max(theint)
from
(
select (select t.* for xml path(''),type).query('max(/*)').value('.','int') as theint
from tab as t
) as src;
,
您必须使用此代码段
SELECT MAX(TEMP) AS MAXTEMP
FROM DBO.TAB
UNPIVOT ( TEMP FOR TEMPVal IN ( TEMP1,TEMP2,TEMP3,TEMP4) ) AS u
,
没有简单的方法。通过使用动态SQL是。这种针对表的设计违反了规范化规则,这是导致编写简单有效查询的能力差的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。