Mal*_*ist 158 t-sql sql-server
我有两个变量,一个是调用PaidThisMonth
,另一个是调用OwedPast
.它们都是SQL中某些子查询的结果.如何选择两者中较小的一个并将其作为标题值返回PaidForPast
?
该MIN
函数适用于列,而不是变量.
Mer*_*soy 122
SQL Server 2012和2014支持IIF(cont,true,false)功能.因此,对于最小的选择,您可以使用它
SELECT IIF(first>second, second, first) the_minimal FROM table
Run Code Online (Sandbox Code Playgroud)
Cha*_*ana 117
使用案例:
Select Case When @PaidThisMonth < @OwedPast
Then @PaidThisMonth Else @OwedPast End PaidForPast
Run Code Online (Sandbox Code Playgroud)
作为内联表值UDF
CREATE FUNCTION Minimum
(@Param1 Integer, @Param2 Integer)
Returns Table As
Return(Select Case When @Param1 < @Param2
Then @Param1 Else @Param2 End MinValue)
Run Code Online (Sandbox Code Playgroud)
用法:
Select MinValue as PaidforPast
From dbo.Minimum(@PaidThisMonth, @OwedPast)
Run Code Online (Sandbox Code Playgroud)
附录:这可能最适合仅处理两个可能的值,如果有两个以上,请考虑使用Values子句的Craig答案.
Cra*_*aig 98
使用CASE,IIF和UDF的解决方案是足够的,但在使用2个以上的比较值将问题扩展到一般情况时是不切实际的.SQL Server 2008+中的通用解决方案使用VALUES子句的奇怪应用程序:
SELECT
PaidForPast=(SELECT MIN(x) FROM (VALUES (PaidThisMonth),(OwedPast)) AS value(x))
Run Code Online (Sandbox Code Playgroud)
归功于本网站:http: //sqlblog.com/blogs/jamie_thomson/archive/2012/01/20/use-values-clause-to-get-the-maximum-value-from-some-columns-sql-服务器叔sql.aspx
Mar*_*inC 28
我只是遇到了一种情况,我必须在更新中找到最多4个复杂选择.使用这种方法,您可以拥有任意多个!
您也可以使用aditional选择替换数字
select max(x)
from (
select 1 as 'x' union
select 4 as 'x' union
select 3 as 'x' union
select 2 as 'x'
) a
Run Code Online (Sandbox Code Playgroud)
更复杂的用法
@answer = select Max(x)
from (
select @NumberA as 'x' union
select @NumberB as 'x' union
select @NumberC as 'x' union
select (
Select Max(score) from TopScores
) as 'x'
) a
Run Code Online (Sandbox Code Playgroud)
我确信UDF具有更好的性能.
Gil*_*lin 16
对于MySQL或PostgreSQL,更好的方法是使用LEAST和GREATEST函数.
SELECT GREATEST(A.date0, B.date0) AS date0,
LEAST(A.date1, B.date1, B.date2) AS date1
FROM A, B
WHERE B.x = A.x
Run Code Online (Sandbox Code Playgroud)
两者都在这里描述:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
小智 11
如果你想计算最大值(字段,0),这是一个技巧:
SELECT (ABS(field) + field)/2 FROM Table
Run Code Online (Sandbox Code Playgroud)
如果field
是否定则返回0 ,否则返回field
.
使用CASE语句.
此页面中的示例B应该接近您要执行的操作:http:
//msdn.microsoft.com/en-us/library/ms181765.aspx
这是页面中的代码:
Run Code Online (Sandbox Code Playgroud)USE AdventureWorks; GO SELECT ProductNumber, Name, 'Price Range' = CASE WHEN ListPrice = 0 THEN 'Mfg item - not for resale' WHEN ListPrice < 50 THEN 'Under $50' WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' ELSE 'Over $1000' END FROM Production.Product ORDER BY ProductNumber ; GO
归档时间: |
|
查看次数: |
224188 次 |
最近记录: |