Вычисление внутри оператора select - PullRequest
0 голосов
/ 16 марта 2012

У меня есть хранимая процедура, в которой я выбираю 10 столбцов в зависимости от условия. Ничего особенного, просто SELECT col 1 - 10 WHERE date is between x and y. Один из выбранных столбцов содержит битовый переключатель. Я хочу иметь возможность проверить этот битовый переключатель, и если его 1 назначить значение, основанное на некоторой математике, назначить столбцу еще на основе некоторой альтернативной математики.

SELECT col1...col10 
FROM table a
WHERE getDate is BETWEEN x AND y

IF col5 = 1 THEN
   col10 = quantity - quantitysold
ELSE
   col10 = quantity - SUM(quantitysold, yearlyonhand) 

является основной идеей. Это то, что я пытаюсь так далеко от цели? это кажется достаточно простой концепцией, я просто не уверен, как заставить это работать.

Моя другая мысль состояла в том, чтобы, возможно, создать udf, который обрабатывал вычисления, и вызывать эту функцию изнутри sproc, если битовый переключатель был 1, и альтернативной функции, если нет. Это выглядит как ненормальное количество работы для относительно простой концепции.

Ответы [ 3 ]

0 голосов
/ 17 марта 2012

Я думаю, что вы ищете case утверждение:

select col1, .... , 
      case col5 when 0 then ... 
                when 1 then ... , 
       col6, .... 
Where
   ...
0 голосов
/ 17 марта 2012

как то так?

update table
set col10 = (case when col5 = 1 then quantity - quantitysold else quantity - quantitysold + yearlyonhand end)
where getDate between x and y
0 голосов
/ 16 марта 2012

Убедитесь, что количество, количество проданных товаров и т. Д. Являются столбцами таблицы или выполните объединение, если необходимо ...

SELECT
    col1...,
    CASE
        WHEN col5 = 1 THEN quantity - TotalSoldToday
        ELSE quantity - (TotalSoldToday + yearlyonhand) 
    END AS col10 
LEFT JOIN
(
    SELECT
        Sum(Quantity) as TotalSoldToday
    FROM
        table a
    WHERE
        Convert(Date, DateColumn) = Convert(Date, GETDATE())
) T on 1 = 1
FROM
    table a
WHERE
    DateColumn is BETWEEN x AND y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...