2015-02-10 2 views
0

Я пытаюсь получить следующий SQL код, чтобы работать, однако я борюсь с поиском, как сделать несколько вычислений с сазом, вот код:Несколько Расчетов в сазе SQL

SELECT 
dbo.Table1.PrimaryKeyID, 
    CASE 

     WHEN (number1 >0 AND number2 = 0) 
      THEN number1 = number1 + CalcView.Quantity 

     WHEN (number1 =0 AND number2 <=0) 
      THEN number3 = number3 + CalcView.Quantity, 
        number2 = number2 - CalcView.Quantity 

     WHEN (number1 =0 AND number2 >0) 
      THEN number3 = number3 + number2 
        number1 = number1 + (CalcView.Quantity - number2) 
        number2 = 0 
END 
FROM Table1 
INNER JOIN CalcViewON Table1.PrimaryKeyID= CalcView.PrimaryKeyID 
WHERE Table1.PrimaryKeyID= CalcView.PrimaryKeyID 
  • мнение присутствует, чтобы избавиться от SUM(), который заставит меня использовать GROUPBY
  • имена не то, что я использую, я изменил их, чтобы сделать его проще underst и ..

Как вы можете видеть, что я только что поставил вычисления в пределах THEN в данный момент, пожалуйста, может кто-нибудь мне точку в правильном направлении, как получить это заявление на работу? большое спасибо за любую помощь вы можете дать мне

Примеры:

Case 1 
Number1 = 5 
Number2 = 0 
CalcView.Quantity = 3 

5 = 5 + 3 (8) 


Case 2 
Number 1 = 5 
Number 2 = 3 
Number 3 = 2 
CalcView.Quantity = 3 

2 = 2 + 3 (5) 
3 = 3 - 3 (0) 


Case 3 
Number 1 = 5 
Number 2 = 3 
Number 3 = 2 
CalcView.Quantity = 6 

2 = 2 + 3 (5) 
1 = 1 + (6 – 3) (4) 
Number2 = 0 

цель: обновить число1, число2 и number3 на основе утверждений 3 КОГДА. в настоящее время я использую инструкцию select, чтобы убедиться, что я достигаю правильных выходов ...

Какие альтернативы существуют в заявлениях CASE, которые могли бы помочь мне достичь моей цели? Еще раз спасибо

+0

Ваш синтаксис все не так, вы пытаетесь выбрать 4 колонки в вашем примере? Если это так, вам потребуются три отдельных случая. Можете ли вы предоставить пример вывода того, что вы хотите, чтобы ваш запрос возвращался? – Tobsey

+0

В дополнение к вопросам Тобейса вы могли бы предоставить образец ввода? Вы можете использовать http://sqlfiddle.com/ в качестве базы для создания сценария для нас –

+0

Непонятно, что вы пытаетесь сделать. Ваши первые два «Когда» возвращают одинаковое значение. Затем в третьем и четвертом «Когда» вы устанавливаете переменные? Вы не можете устанавливать переменные внутри оператора case, вы можете вернуть значение только. Итак, «number1 = case, когда (number1 = 0 и number2 = 0), а затем 15 else 14 end» будет так, как вы устанавливаете переменную с аргументом case. –

ответ

2

Вы пытаетесь вычислить number1, number2 и number3 с использованием одного CASE...WHEN...END заявления, это не будут работать - вам нужно 3 различных заявления регистра.

Если я правильно понимаю вашу логику, это должно сделать это

SELECT 
dbo.Table1.PrimaryKeyID, 
    CASE 
    WHEN (number1 >0 AND number2 = 0) 
     THEN number1 + CalcView.Quantity 
    WHEN (number1 =0 AND number2 >0) 
     THEN number1 + (CalcView.Quantity - number2) 
    ELSE 
     number1 
    END AS number1, 
    CASE 
    WHEN(number1 =0 AND number2 <=0) 
     THEN number2 - CalcView.Quantity 
    WHEN (number1 =0 AND number2 >0) 
     THEN 0 
    ELSE 
     number2 
    END AS number2, 
    CASE 
    WHEN (number1 =0 AND number2 <=0) 
     THEN number3 + CalcView.Quantity 
    WHEN (number1 =0 AND number2 >0) 
     THEN number3 + number2 
    ELSE 
     number3 
    END AS number3 
FROM Table1 
INNER JOIN CalcViewON Table1.PrimaryKeyID= CalcView.PrimaryKeyID 
WHERE Table1.PrimaryKeyID= CalcView.PrimaryKeyID 
+0

thankyou, perfect answer – Crezzer7

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