我一直在寻找与Oracle LEAST功能相当的优势.
我希望实现一个用户定义的函数来完成大约10个相当复杂的计算,并从每个计算中获取最小值.
我在Oracle中会做的是:
SELECT LEAST
(
select expression1 from dual,
select expression2 from dual,
select expression3 from dual
) from dual
Run Code Online (Sandbox Code Playgroud)
有关Oracle LEAST的更多信息,请访问http://www.techonthenet.com/oracle/functions/least.php.
如果expression1返回10,表达式2返回5,而表达式3返回30,整个表达式将返回5.
因为这可能是大约10-20次计算,所以CASE WHEN语法很快就会变得难以处理.
虽然如果我们更多地分解它,代码将更具可读性,但我认为在一个数据库查询中执行它会更有效.请告诉我在这一点上我是不正确的!
即,具有20个简单查询的存储过程明显慢于存储过程,其中一个查询在一个查询中引用了大量表.
我有一个包含2个日期列的表:
create_date和modify_date.
create_date总是modify_date有时候设定.
现在我想用两个具有相同优先级的查询来命令我的查询.
如果我这样做:
order by create_date desc, modify_date desc
Run Code Online (Sandbox Code Playgroud)
我首先得到排序的所有行create_date然后按,modify_date但我希望按两个行排序的行具有相同的优先级.我需要这个:
create_date | modify_date
2011-12-31 | -
2011-12-01 | 2011-12-30
2011-12-29 | -
Run Code Online (Sandbox Code Playgroud) 我试图限制特定字段,以便它们不超过特定值.
例如,这样的东西就足够了,我可以指定一个字段不应超过8:
SELECT (
cap(t.MondayHrs,8)
+ cap(t.TuesdayHrs,8)
+ cap(t.WednesdayHrs,8)
+ cap(t.ThursdayHrs,8)
+ cap(t.FridayHrs,8)
) as TotalHours
Run Code Online (Sandbox Code Playgroud)
如果MondayHrs = 7,则应将其添加到TotalHours为7.如果MondayHrs = 10,则应将其添加到TotalHours为8(我的上限值)
T-SQL内置了什么可以促进这一点?
如果值小于零而不使用case语句,是否可以返回零?
例如Max(a,0)< - 'Max'不存在.
我希望我的代码尽可能简洁.