2012-03-16 4 views
0

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

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 и альтернативной функцией, если нет. Это похоже на ненормальное количество работы для относительно простой концепции.

+0

Примите ответ на предыдущий вопрос, который вы задали! –

+1

мои извинения, я думал, что сделал это. Я вернулся и сделал это, когда это применимо. – SSISPissesMeOff

ответ

0

Я думаю, что вы ищете case заявление:

select col1, .... , 
     case col5 when 0 then ... 
       when 1 then ... , 
     col6, .... 
Where 
    ... 
0

Убедитесь, что количество, quantitysold и т.д. столбцы из таблицы или делать в случае необходимости объединения ...

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 
+0

Они являются частью выбранного списка, при этом соединение не требуется. Я попробую это решение и посмотрю, работает ли оно. Похоже на то, что было отключено, был мой синтаксис в моем заявлении. – SSISPissesMeOff

+0

Извините, я забыл упомянуть, что используемая формула количества должна использовать встроенные функции. в основном, если переключатель = 1 количество = dailylimit - сколько продано сегодня. так что-то вроде: quantity = col5 - count (totalsold) today – SSISPissesMeOff

0

что-то вроде этого?

update table 
set col10 = (case when col5 = 1 then quantity - quantitysold else quantity - quantitysold + yearlyonhand end) 
where getDate between x and y 
+0

Я не хочу обновлять таблицу. в основном возвращать информацию. Единственное примечание стороны - один из столбцов, которые я возвращаю, должен быть вычислен. Вычисление зависит от значения битового переключателя из таблицы. Если переключатель истинен, то сумма для возврата будет равна количеству - количество (теперь), иначе общее количество возвращаемых будет количество - количество проданных (навсегда). Это имеет смысл? – SSISPissesMeOff

Смежные вопросы