2015-02-10 65 views
0

我試圖讓下面的SQL代碼的工作,但是我正與找出如何做多個計算與case語句掙扎,這裏是代碼:多個計算

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 

的宗旨:立足3個WHEN語句來更新數字1,數字和number3的。目前我正在使用select語句來確保我實現了正確的輸出...

CASE語句有哪些替代方法可以幫助我實現目標?再次感謝

+0

你的語法都錯了,你想在你的榜樣,選擇4列?如果是這樣,那麼你需要三個單獨的案例陳述你能提供一個你希望你的查詢返回的例子輸出 – Tobsey 2015-02-10 12:21:39

+0

除了Tobseys的問題,你能否提供樣本輸入?您可以使用http://sqlfiddle.com/作爲基礎爲我們生成示例場景 – 2015-02-10 12:22:55

+0

您目前尚不清楚您要做什麼。你的前兩個「Whens」返回相同的值。那麼在你的第三和第四個「何時」你正在設置變量?你不能在case語句內設置變量,你只能返回一個值。所以「number1 = case(when number1 = 0 and number2 = 0)then 15 else 14 end」就是你如何用case語句設置一個變量。 – 2015-02-10 12:23:30

回答

2

您正在試圖計算number1number2number3使用單一CASE...WHEN...END聲明,這將無法工作 - 你需要3個不同的case語句。

如果我理解你的邏輯,這應該這樣做

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

謝謝,完美的答案 – Crezzer7 2015-02-10 12:43:13