返回数据计算结果的 SQL 语法

Posted

技术标签:

【中文标题】返回数据计算结果的 SQL 语法【英文标题】:SQL Syntax for calculating results of returned data 【发布时间】:2009-02-04 15:36:02 【问题描述】:

我正在尝试对从 SQL Server 返回的一些数据执行简单的计算:

SELECT  val1X, val1Y, val2X, val2Y FROM myTable

我希望能够根据返回的值计算以下内容并只返回一个值 - 下面的计算结果(这最初是用 VB6 编写的):

 If IsNull(val1X) Or IsEmpty(val1X) Then val1X = 0
    If IsNull(val1Y) Or IsEmpty(val1Y) Then val1Y = 0
    If IsNull(val2X) Or IsEmpty(val2X) Then val2X = 0
    If IsNull(val2Y) Or IsEmpty(val2Y) Then val2Y = 0

    res1 = (val1X ^ 2) + (val1Y ^ 2)
    res2 = (val2X ^ 2) + (val2Y ^ 2)

    ResultVal = Sqr(IIf(res1 > res2, res1, res2))

只是想知道最好的方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

您可以在 SQL 中的一条语句中完成所有操作,但它看起来有点难看,因为您必须重复块:

SELECT 
  CASE WHEN 
    /* res1 */ Power(IsNull(val1X, 0), 2) + Power(IsNull(val1Y, 0), 2) 
    > /* res2 */ Power(IsNull(val2X, 0), 2) + Power(IsNull(val2Y, 0), 2)
  THEN
    /* res1 */ Power(IsNull(val1X, 0), 2) + Power(IsNull(val1Y, 0), 2)
  ELSE
    /* res2 */ Power(IsNull(val2X, 0), 2) + Power(IsNull(val2Y, 0), 2)
  END
FROM
  myTable

使用用户定义的函数来包装 Power(IsNull(field, 0), 2) 会更简洁一些,这样您就不会重复太多,但我将其保留为运动给你做。 :)

【讨论】:

太好了,谢谢。最后一个问题,如何指定列名? 已解决,我只是在SELECT语句末尾使用了“AS columnname”。

以上是关于返回数据计算结果的 SQL 语法的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server数学函数

SQL Server 数学函数 相关

SQL如何显示查询结果的前100条?

SQL Server存储过程同时返回分页结果集和总数

sql中count是啥含义

SQL查询中用到的函数