简体   繁体   English

case 表达式中的 case 表达式

[英]Case expression inside of a case expression

I am using a LIMS database software and trying to simplify things for our analysts.我正在使用 LIMS 数据库软件并试图为我们的分析师简化事情。

Originally I had this direct case statement that works great for each "test" we use最初我有这个直接 case 语句,它适用于我们使用的每个“测试”

CASE

WHEN ([Dry Fertilizer].[Phosphorus ICP (< 6.99 Guar)].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.67)) 

THEN -1 ELSE 0

END

Another one另一个

CASE
    WHEN ([Dry Fertilizer].[Phosphorus ICP (10-13.99 Guar)].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.69)) THEN -1
    ELSE 0
END

It's purpose is to look at test result [Phosphorus], compare to a known number [Guarantee] and then calculate and output "-1" if it is below and thus fails or "0" and passes.其目的是查看测试结果[磷],与已知数字[保证]进行比较,然后计算并输出“-1”如果低于则失败或“0”并通过。

Now instead of having a different test for each "guarantee" I am looking at taking all those numbers and making a fairly large calculation but my software just hangs when I try to run the calculation.现在,我不再对每个“保证”进行不同的测试,而是考虑采用所有这些数字并进行相当大的计算,但是当我尝试运行计算时,我的软件就挂了。 What can I do to simplify this code or make it work?我可以做些什么来简化此代码或使其工作? Here is the code:这是代码:

CASE    When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =4) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.67)) THEN -1 ELSE 0 End

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =5) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.67)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =6) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.67)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =7) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.68)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =8) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.68)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =9) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.68)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =10) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.69)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =12) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.69)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =14) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.7)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =16) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.7)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =18) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.71)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =20) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.72)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =22) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.72)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =24) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.73)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =26) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.73)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =28) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.74)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =30) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.75)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =32) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.76)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =34) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.794)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =36) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.828)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =38) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.862)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =40) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.896)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =42) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.93)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =44) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.964)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =46) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.998)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =48) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-1.032)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =50) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-1.066)) THEN -1 ELSE 0 End 

When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =52) Then
    Case When ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-1.1)) THEN -1 ELSE 0 End 


End

Why do you need a nested CASE, you could simply use AND为什么你需要一个嵌套的 CASE,你可以简单地使用 AND

 SELECT CASE When ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee] =4) AND ([Dry Fertilizer].[Phosphorus ICP].[Phosphorus] < ([Dry Fertilizer].[Phosphorus Guarantee].[Phosphorus Guarantee]-0.67)) THEN -1 
 WHEN
 WHEN
 WHEN ETC
 ELSE 0 END AS [YOURCOL]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM