你如何在 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;
还有其他表达逻辑的方式。但是 IF
和 CASE
都不需要——只是简单的过滤条件。
以下两种方法中的任何一种都应该可以满足您的需求...
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
我是 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;
还有其他表达逻辑的方式。但是 IF
和 CASE
都不需要——只是简单的过滤条件。
以下两种方法中的任何一种都应该可以满足您的需求...
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