select *
from fb_lab_test
where (report_item_code = 'HBcAb')
or (report_item_code = 'Anti-Hbc' and
case isnumeric(result) when 1 then cast(result as float) else 10000.0 end > 0.2)
Ошибка преобразования типа данных varchar в float
Вот пример данных
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE fb_lab_test
(
[id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[Test_No] [varchar](50) NULL,
[execute_date] [datetime] NULL,
[PatientId] [varchar](20) NULL,
[Visit_Id] [varchar](10) NULL,
[Patient_Type] [int] NULL,
[PatientName] [varchar](100) NULL,
[result_date_time] [datetime] NULL,
[report_item_name] [varchar](256) NULL,
[report_item_code] [varchar](50) NULL,
[result] [varchar](100) NULL
) ON [PRIMARY]
GO
INSERT INTO fb_lab_test
VALUES ('5910315197','2019-10-31 00:40:53.000','111111','1','1','Tom','2019-10-31 08:56:54.000','test1','KET','-')
В этом примере данных isnumeric
вернет ложные срабатывания , но case isnumeric(result) when 1 then cast(result as float) else 10000.0 end > 0.2
никогда не следует оценивать, потому что в выборке даты нет report_item_code
с именем 'Anti-Hb c', что странно.