如何在SQL中实现if / then逻辑

时间:2017-08-20 01:09:44

标签: sql sql-server if-statement conditional

我是SQL和数据库的新手,所以请耐心等待。

我已经知道这个查询不正确,但我认为其他开发人员可以理解我尝试做的事情。有关如何修复此查询以使其生效的任何想法?

         SELECT [LabTest], Count(*)
         FROM [UsersDB].[dbo].[vwUserLabTest]
         IF (LabTest='PTT') SET RangeMax=35
         IF (LabTest='CK') SET RangeMax=150
         IF (LabTest='Ca') SET RangeMax=10.1
         WHERE ResultValue>RangeMax
         GROUP By LabTest

3 个答案:

答案 0 :(得分:1)

我想你想要:

SELECT [LabTest], Count(*)
FROM [UsersDB].[dbo].[vwUserLabTest]
WHERE (LabTest = 'PTT' AND ResultValue > 35) OR
      (LabTest = 'CK' AND ResultValue > 150) OR
      (LabTest = 'CA' AND ResultValue > 10.1)
GROUP By LabTest;

还有其他表达逻辑的方法。但是,IFCASE都不需要 - 只需简单的过滤条件。

答案 1 :(得分:0)

以下两种方法中的任何一种都可以让你获得你之后的......

SELECT 
    ult.LabTest, 
    LT_Count = COUNT(*)
FROM 
    UsersDB.dbo.vwUserLabTest ult
    CROSS APPLY ( VALUES (
                        CASE ult.LabTest
                            WHEN 'PTT'  THEN 35.0
                            WHEN 'CK'   THEN 150.0
                            WHEN 'Ca'   THEN 10.1
                        END) 
                        ) rm (RangeMax)
WHERE 
    ult.ResultValue > rm.RangeMax
GROUP By 
    ult.LabTest;

- 或者

SELECT 
    ult.LabTest, 
    LT_Count = COUNT(*)
FROM 
    UsersDB.dbo.vwUserLabTest ult
WHERE 
    (ult.LabTest = 'PTT' AND ult.ResultValue > 35)
    OR
    (ult.LabTest = 'CK' AND ult.ResultValue > 150)
    OR 
    (ult.LabTest = 'Ca' AND ult.ResultValue > 10.1)
GROUP By 
    ult.LabTest;
HTH,Jason

答案 2 :(得分:0)

您可以使用选择进行选择 在语法上按首先选择,然后从第一次选择进行第二次选择例如

  

阻止报价

从()中选择mylabtest,count(*) 选择(当LabTest ='PTT'然后35例情况,当LabTest ='CK'然后150其他LabTest ='CA'然后10.1)作为mylabtest来自.... )mylabtest分组

  

阻止报价

Reguards A.Ayati