Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Excel公式转换为SQL Case_Sql_Sql Server_Excel - Fatal编程技术网

将Excel公式转换为SQL Case

将Excel公式转换为SQL Case,sql,sql-server,excel,Sql,Sql Server,Excel,早上好,斯塔克,我需要一些主要的帮助 我必须将EXCEL公式转换为SQL案例。 当我到达最后一段时,整个事情就一直在我身上分崩离析。我一辈子都想不出如何正确地设置它,我已经厌倦了因为它而被踢到全国广告部 我的主要问题是excel如何处理它的If/then的多个Else药剂 以下是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(W

早上好,斯塔克,我需要一些主要的帮助

我必须将EXCEL公式转换为SQL案例。 当我到达最后一段时,整个事情就一直在我身上分崩离析。我一辈子都想不出如何正确地设置它,我已经厌倦了因为它而被踢到全国广告部

我的主要问题是excel如何处理它的If/then的多个Else药剂

以下是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案例: 它被设计成一个外部应用程序的一部分,因为我在自己的外部应用程序中处理所有数学部分。这样,我后面的任何人都会发现代码被正确地分割和记录

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个小时了,我的大脑很痛。 假设所有的都是整数,来描述这个例子。铸造的细节将在稍后公布。
目前,您的解决方案非常混乱,无法验证它是否与Excel公式匹配。

快速匹配显示最后一节中可能有错误

你有这个:

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 

下面是一些我用来分解它的伪代码

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

我建议重新开始。一次只做一步,一旦你有了一个单独的部分,就别管它了。是的,我已经做过几次了,以上是我第四次尝试整件事。在这一点上,我需要对它的另一套眼睛,因为我越来越墙眼睛。我们以前都来过这里,你只需要走开,让其他人说嘿,伙计,你忘了a或类似的东西。“其他多种药剂”,嗯?我建议在尝试生成相应的SQL之前将Excel公式翻译成英文/伪代码。是的,我有,我没有提供,我不想发布比我已经发布的更大的文本墙。我将在“现在”中编辑它。我再次开始将每个部分作为外部应用来执行,然后拉入“选择值进行比较”。但在这样做的过程中,我遇到了另一个错误,因此我再次退出,尝试从使用外部应用程序转移到在上主选择中进行比较。如果我没有记错,我无法在外部应用程序中放置Declare/Set。如果我错了,请纠正我。@user1949329正确,我只是解决了你的问题的一部分,不得不做一些其他的事情。与其放弃我所拥有的,不如把它贴出来。好吧,我很感激你的回复,我现在正在努力处理它。我正在接受你的帖子,并将其转换为一系列外部应用程序。然后我就可以用内在的参照来做这个例子。应该会更容易。如果这可行,我将稍后发布。感谢you@user1949329你可以看到,大部分的复杂性实际上是倒退到0。是的,实际上你的帖子让我重新思考了我迄今为止写的400多行。我现在要走了,但我将在周一重做整个代码集。我想从长远来看,这对我来说会更好。以你的例子为指导,我将改变所有的数学是如何在这篇文章中完成的,然后根据需要引用这些方程组。
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