Синтаксис SQL для расчета результатов возвращаемых данных - PullRequest
0 голосов
/ 04 февраля 2009

Я пытаюсь выполнить простой расчет для некоторых данных, возвращаемых с 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 Ответ

3 голосов
/ 04 февраля 2009

Вы можете сделать все это одним оператором в 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), чтобы вы не повторяли себя так много, но я оставлю это как упражнение для вас, чтобы сделать. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...