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

How do you implement if/then logic in SQL

我是 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

我想你想要:

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 都不需要——只是简单的过滤条件。

以下两种方法中的任何一种都应该可以满足您的需求...

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,杰森

您可以在 select 中使用 select 使 first select 通过 case when 语法和 second select from first select例如

Block quote

Select mylabtest, 计数(*) 来自( Select(当 LabTest = 'PTT' 然后 35 其他情况当 LabTest = 'CK' 然后 150 else LabTest = 'CA' 然后 10.1 )作为 mylabtest 来自.... ) 按 mylabtest 分组

Block quote

回礼 A.Ayati