我必须将EXCEL公式转换为SQL案例。 当我到达最后一节时,整个事情一直在崩溃。我不能为我的生活弄清楚如何正确地设置它,而且我厌倦了被踢到黑头上。
我的主要问题是excel如何处理其If / then's的多个“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。
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个小时,我的大脑只是疼了
答案 0 :(得分:0)
简化它。 假设所有都是整数,形成CASE。铸造的细节应该在以后进行。 目前,您所拥有的解决方案非常混乱,无法验证它是否与Excel公式匹配。
答案 1 :(得分: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
答案 2 :(得分: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