我是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
答案 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;
还有其他表达逻辑的方法。但是,IF
和CASE
都不需要 - 只需简单的过滤条件。
答案 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