2013-11-15 157 views
0

早上好,Stack,我需要一些重要的幫助。將Excel公式轉換爲SQL案例

我必須將EXCEL公式轉換爲SQL案例。 當我到達最後一節時,整個事情一直在我身上散開。我不能爲了我的生活而弄清楚如何正確地設置它,而且我厭倦了在它上面踢腳。

我的主要問題是Excel如何處理它的if/then是

這裏是Excel中的多個「其他」藥水:

=IF(AND(W7+H7<=0,IF(E7-H7-S7>0,E7-H7-S7,0)<=0),0,IF(W7+H7<IF(E7-H7-S7>0,E7-H7-S7,0),IF(W7+H7<0,0,W7+H7),IF(E7-H7-S7>0,IF(W7>H7,E7-S7,H7+AF7),H7))) 

下面是相關的部分,它們是如何被轉換爲SQL至今。

E4 = TotInChar.TotInChar 
H4 = CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2)) 
W4 = CAST(tmpdc.[14]AS decimal(10,2)) 
S4 = T4MathBlock.TTIV 
AF4 = [AmountIncluded].[Amount] 

這裏是SQL案例到目前爲止,我已經做了。 (其設計成一個外部的一部分應用,因爲我處理自己外所有數學部分適用任何人的方式,來我後面會發現分段並正確記錄的代碼)

SELECT (CASE 
    WHEN CAST(tmpdc1.[14]AS decimal(10,2))+(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2))) <= 0 
       AND (CASE WHEN(TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV) >0 
         THEN TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV 
      ELSE '0.00' END) <=0 THEN '0.00' 
    /* part 2*/  
    WHEN CAST(tmpdc1.[14] AS decimal(10,2))+(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2))) 
       < 
      (CASE WHEN (TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV) 
       > 0 
      THEN TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV 
       ELSE '0.00' 
      END) 
      THEN (TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV) 
    /*Part 3*/ 

    WHEN CAST(tmpdc.[14]AS decimal(10,2))+CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2)) 
      < 0 THEN '0.00' 
     ELSE (CAST(tmpdc.[14]AS decimal(10,2))+CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2))) 
    /*Part 4*/          

    WHEN TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV 
      > 0 THEN 
       (CASE(CAST(tmpdc.[14]AS decimal(10,2)) > CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2)) 
        THEN TotInChar.TotInChar - T4MathBlock.TTIV ELSE '0.00') 
     ELSE CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2))) 
    End 



End) AS[ANT4] 
From #TempDisclosure tmpdc1 
        WHERE tmpdc1.[Number] = Tmpdc.[Number] 

感謝您的幫助,您可以在此給,我在這已經工作了約10小時,現在,我的大腦只是傷害

+4

我建議重新開始。一次只做一步,一旦你有一個單獨的部分工作,不要管它。 –

+0

是的,我已經做了這個,現在幾次,以上是我在整個事情上的第四次嘗試。此時我需要另一雙眼睛,因爲我正在注視着眼睛。 我們之前都在這裏,你需要走開,讓別人說「嘿,你忘了一個」)或類似的東西。 – user1949329

+0

'多個'其他'藥水',呃? – Jodrell

回答

0

快速括號匹配顯示有可能是在最後一節的錯誤...

你有這樣的:

WHEN TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV 
     > 0 THEN 
      (CASE(CAST(tmpdc.[14]AS decimal(10,2)) > CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2)) 
       THEN TotInChar.TotInChar - T4MathBlock.TTIV ELSE '0.00') 
    ELSE CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2))) 
End 

試試這個:

WHEN TotInChar.TotInChar -(CAST(tmpdc1.[3]AS Decimal (10,2)) + CAST(tmpdc1.[5]AS Decimal (10,2)))- T4MathBlock.TTIV 
     > 0 THEN 
      (CASE(CAST(tmpdc.[14]AS decimal(10,2)) > CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2))) 
       THEN TotInChar.TotInChar - T4MathBlock.TTIV ELSE '0.00' 
    ELSE CAST(tmpdc.[3]AS Decimal (10,2)) + CAST(tmpdc.[5]AS Decimal (10,2))) 
End 
0

簡化IT 。 假設所有的都是整數,就制定CASE。鑄造的細節應該晚一些。 目前您所擁有的解決方案如此混亂以至於無法驗證它是否與Excel公式匹配。

+0

我再次開始做每個部分作爲外部申請,然後拉入選擇比較值。 但是在這樣做,我打了另一個錯誤,所以我再次退後,試圖從使用外部申請的,在上面的「主要」選擇做比較 – user1949329

0

下面是一些僞代碼,我用它來分解它。

DECLARE a int; 
DECLARE b int; 

SET a = (W7 + H7); 
SET b = (E7 - H7 - S7); 

IF (b < 0) THEN b = 0; 

IF (a <= 0 AND b <= 0) THEN BEGIN 
    0 
END ELSE BEGIN 
    IF (a < b) THEN BEGIN 
     IF (a < 0) THEN BEGIN 
      0 
     END ELSE BEGIN 
      a 
     END 
    END ELSE BEGIN 
     IF (b > 0) THEN BEGIN 
      IF (W7 > H7) THEN BEGIN 
       E7 - S7 
      END ELSE BEGIN 
       H7 + AF7 
      END 
     END ELSE BEGIN 
      H7 
     END 
    END 
END 
+0

如果我沒有記錯的話,我不能把一個申報/設置在一個外部申請。請糾正如果我錯了,請告訴我。 – user1949329

+0

@ user1949329是正確的,我只是解決了你的問題,並不得不做其他事情。而不是放棄我以爲我可能會發布它。 – Jodrell

+0

好的,我很欣賞這個迴應,現在我正在嘗試使用它。 我把你的帖子,並將其轉換爲一系列的外部應用。然後,我可以用內在的參考來做這件事。應該讓它更容易。如果這能解決問題,我會在後期發帖。謝謝 – user1949329